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