программа для решения ЕГЭ-задачи уходит в бесконечный цикл
Мне нужны все основания систем счисления, в которых запись числа 22 оканчивается на 4. Написал след код:
#функция для перевода числа n
# в систему счисления с основанием base
def con(n, base):
s = ''
while n > 0:
ost = n%base
s +=str(ost)
n//=base
s = s[::-1]
return s
#вывод чисел, оканчивающихся на 4 и оснований с.с
for i in range(1,100):
r = con(22,i)
if r[len(r)-1]=='4':
print(i, r)
не понимаю, почему программа зацикливается. Подскажите, пожалуйста ещё какие-то фишки для лаконичности кода, если таковые есть
P.S. задачу можно решить и вручную, но я хочу автоматизировать
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Не нужно переводить число полностью в другую систему, достаточно одного остатка от деления. А раз так, то нужно подключить соображалку
22 % m = 4 // m - основание системы счисления, причём m>4
Это эквивалентно
22 = 4 + p * m // p -= целое число
или
18 = p * m
Итак, остается получить такие разложения 18 на два множителя, что m > 4. Тут это легко сделать в уме, а если числа будут большие, то и программно нетрудно разложить.
Это m = 6, 9 и 18
def sysmod(value, mod):
value -= mod
for p in range(value//mod-1, 0, -1):
if value % p == 0:
print (value // p)
sysmod(22, 4)