-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..--
