for a in range (1,43):
k=a
if k%2==0:
k=k/2
else:
k=k-1
if k%3==0:
k=k/3
else:
k=k-1
if k%7==0:
k=k/7
else:
k=k-1
if k==1:
print(a)
for x in range(2,1000): n=bin(x)[2:] k1=0 k0=0 for i in range(1,len(n),2): k1+=int(n[i]) for i in range (0,len(n),2): if n[i]='0': k0+=1 if abs(k1-k0)==5: print(x)
Алгоритм получает на вход натуральное число ?>1 и строит по нему новое число ? следующим образом:
- Строится двоичная запись числа ?.
- Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется та цифра, которая встречается реже.
- Шаг 2 повторяется ещё два раза.
- Результат переводится в десятичную систему счисления.
Пример. Дано число ?=19. Алгоритм работает следующим образом:
- Двоичная запись числа N: 10011.
- В полученной записи нулей меньше, чем единиц, в конец записи добавляется 0. Новая запись: 100110.
- В текущей записи нулей и единиц поровну, в конец записывается последняя цифра, это 0. Получается 1001100. В этой записи единиц меньше, в конец добавляется 1: 10011001.
- Результат работы алгоритма ?=153.
При каком наименьшем исходном числе ?>99 в результате работы алгоритма получится число, кратное 4?
def modify(st):
(k0, k1) = (st.count('0'), st.count('1'))
if k0 == k1:
st = st + st[-1]
elif k0 > k1:
st = st + '1'
else:
st = st + '0'
return st
N = 99
while True:
strN = bin(N)[2:]
for _ in range(3):
strN = modify(strN)
R = int(strN, 2)
if N > 99 and R % 4 == 0:
print(N);
break
N += 1