Pchełki Python: binarnie do kwadratu

Spróbujemy dziś wyznaczyć setną z kolei liczbę, której binarna reprezentacja ma tyle zer, ile wynosi kwadrat liczby jedynek.

Jeszcze raz. Zaczynamy od N = 1. Zamieniamy ją na postać binarną (1). Liczymy zera (nie ma zer). Liczymy jedynki (jest, jedna). Jeżeli liczba zer podniesiona do kwadratu daje liczbę jedynek, zliczamy tę liczbę. Nie daje, więc bierzemy kolejną, czyli 2. Zamieniamy na binarne, czyli 10. Liczymy zera: jest jedno. Liczymy jedynki: jest jedna. Jeden podniesione do kwadratu daje jeden. Mamy pierwsze dopasowanie!

Szukamy setnej z kolei takiej liczby.

Kod w Pythonie, który nam to wyliczy, wygląda tak:

n, c = 0, 0
while c < 100:
    n = n + 1
    b = str(bin(n))[2:]
    if(b.count('1') ** 2 == b.count('0')):
        c = c + 1
print(n)

n, c = 0, 0 - n to nasza sprawdzana liczba, a c - licznik. Startujemy od zera, tu i tu.
while c < 100: - pętla, która będzie się wykonywać dopóty, dopóki licznik jest mniejszy od stu
n = n + 1 - zwiększamy sprawdzaną liczbę o jeden...
b = str(bin(n))[2:] - tutaj wyznaczamy binarną postać sprawdzanej liczby. [2:] na końcu obcina dwa pierwsze znaki, które w Pythonie są zawsze "0b" (oznaczenie liczby binarnej).
if(b.count('1') ** 2 == b.count('0')): - tu następuje sprawdzenie, czy kwadrat liczby jedynek jest równy liczbie zer, jeżeli tak...
c = c + 1 ... wówczas zwiększamy licznik o jeden.
print(n) - na koniec wypisujemy liczbę, która jest setna z kolei.

Proste?

No pewnie, że proste.

A jaka to liczba?

O dziwo - palindrom: 524425 (binarnie: 10000000000010001001)

Dodaj komentarz

avatar
  Subscribe  
Powiadom o
%d bloggers like this: