Merhabalar, beyin fırtınası yapmak ve ortaya neler çıkacağını görmek adına böyle bir konu açıyorum.
Python bölümüne açtım, fakat istediğiniz programlama dili ile veya sadece algoritmayı söyleyerek cevaplayabilirsiniz.
Soru şöyle :
"Bir sayının 2 nin üssel kuvveti olup olmadığını nasıl hesaplarsın ?"
Örneğin 32 = 2^5 gibi..
En iyi algoritmayı kuran arkadaşı hep beraber tebrik ederiz...
Amaç düşünmeye sevk etmek, farklı düşünce tarzları görmek..
Saatim 00:00 a geldiğinde kendi cevabımı yazacağım.
---- cevap aşağıda ----
Arkadaşlar birçok kişi cevapladı.. Uğraşanlara teşekkürler..
Genelde verilen cevap şu şekilde : "sayıyı sürekli 2 ye böl, kalan 2 ye eşitse o sayı 2 nin kuvvetidir"
evet bu doğru bir algoritma.. Fakat ilk akla gelen yol ve uzun bir yol..
Bir kişi logaritma ile hesaplanan cevabı verdi, o başka bir yöntem ve o da doğru..
Şimdi cevabı birde benden dinleyin..
Bir sayıyı binary tabanlı yazdığımızda sayı 0 ve 1 lerden oluşur.. Ve eğer binary yazılmış bir değerde set edilmiş bitlerin sayısı 1 e eşitse o sayı 2 nin kuvvetidir.
Nasıl yani ?
Örneğin 6 ve 8 sayılarını ele alalım :
6 = 0110 , set edilmiş bit sayısı = 2
8 = 1000 , set edilmiş bit sayısı = 1
8 = 2^3 tür , 6 ise 2 nin kuvveti değildir.
Şimdi bu algoritmanın python koduna bakalım:
cevap = lamda x: bin(x).count('1') == 1
print cevap(32)
çıktımız True olacaktır. Çünkü 32 = 2^5 tir. 32 nin binary yazılışı = 100000 şeklindedir ve set edilmiş bit sayısı 1 dir...
Binary yazılmış bir sayıda sadece 1 adet bit set edilmiş ise o sayı 2 nin kuvvetidir...
Buna benzer algoritma soruları sorup beyin fırtınası yapmaya devam edeceğim.. Böylelikle optimize cevaplar görürüz..
Python bölümüne açtım, fakat istediğiniz programlama dili ile veya sadece algoritmayı söyleyerek cevaplayabilirsiniz.
Soru şöyle :
"Bir sayının 2 nin üssel kuvveti olup olmadığını nasıl hesaplarsın ?"
Örneğin 32 = 2^5 gibi..
En iyi algoritmayı kuran arkadaşı hep beraber tebrik ederiz...
Amaç düşünmeye sevk etmek, farklı düşünce tarzları görmek..
Saatim 00:00 a geldiğinde kendi cevabımı yazacağım.
---- cevap aşağıda ----
Arkadaşlar birçok kişi cevapladı.. Uğraşanlara teşekkürler..
Genelde verilen cevap şu şekilde : "sayıyı sürekli 2 ye böl, kalan 2 ye eşitse o sayı 2 nin kuvvetidir"
evet bu doğru bir algoritma.. Fakat ilk akla gelen yol ve uzun bir yol..
Bir kişi logaritma ile hesaplanan cevabı verdi, o başka bir yöntem ve o da doğru..
Şimdi cevabı birde benden dinleyin..
Bir sayıyı binary tabanlı yazdığımızda sayı 0 ve 1 lerden oluşur.. Ve eğer binary yazılmış bir değerde set edilmiş bitlerin sayısı 1 e eşitse o sayı 2 nin kuvvetidir.
Nasıl yani ?
Örneğin 6 ve 8 sayılarını ele alalım :
6 = 0110 , set edilmiş bit sayısı = 2
8 = 1000 , set edilmiş bit sayısı = 1
8 = 2^3 tür , 6 ise 2 nin kuvveti değildir.
Şimdi bu algoritmanın python koduna bakalım:
cevap = lamda x: bin(x).count('1') == 1
print cevap(32)
çıktımız True olacaktır. Çünkü 32 = 2^5 tir. 32 nin binary yazılışı = 100000 şeklindedir ve set edilmiş bit sayısı 1 dir...
Binary yazılmış bir sayıda sadece 1 adet bit set edilmiş ise o sayı 2 nin kuvvetidir...
Buna benzer algoritma soruları sorup beyin fırtınası yapmaya devam edeceğim.. Böylelikle optimize cevaplar görürüz..
Son düzenleme:




