Hoşgeldin Misafir

Algoritma Sorusu

MiRaT

13 Kas 2017
2,077 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
-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..--