программа для решения ЕГЭ-задачи уходит в бесконечный цикл

Мне нужны все основания систем счисления, в которых запись числа 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)
→ Ссылка