Автомат получает на вход натуральное числа N>1 и строит по нему новое число R следующим образом:
1.Строится двоичная запись числа N.
2. Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется ее последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже.
3. Шаг 2 повторяется еще раз.
4. Результат переводится в десятичную систему счисления.
При каком наибольшем исходном числе N < 300 в результате алгоритма получится число, которое делится на 3, но не делится на 6?
for n in range(2, 300):
b = bin(n)[2:]
if b.count(’0’) == b.count(’1’):
b += b[-1]
elif b.count(’0’) < b.count(’1’):
b += ’0’
else:
b += ’1’
if b.count(’0’) == b.count(’1’):
b += b[-1]
elif b.count(’0’) < b.count(’1’):
b += ’0’
else:
b += ’1’
r = int(b, 2)
if r % 3 == 0 and r % 6 != 0:
print(n)
Ответ: 297