大家好,我解决了这个问题:
Ромка недавно вернулся с юбилея своего друга Сашки. Праздник
отмечался с размахом и Ромка подумал, а что если бы юбилеи были
чаще? Можно же не ограничиваться десятичной системой счисления.
Ромка ввёл понятие юбилейности числа, равное максимальному
количеству нулей в конце записи этого числа в какой-то системе
счисления с основанием B, где B — целое число, большее единицы.
Например, юбилейность числа 256 равна 8, так как в двоичной
системе счисления оно оканчивается на 8 нулей. Ромка хочет узнать,
когда его ближайший значимый юбилей, если в прошлом месяце ему
исполнилось X лет? Значимым юбилеем он считает количество лет,
которое обладает юбилейностью хотя бы L.
Формат входных данных
Единственная строка ввода содержит два целых числа
X и L(1≤X≤10^12; 1≤L≤50).
Формат результата
Выведите единственное число — ответ на задачу.
Примеры
Входные данные
9990 4
Выходные данные
10000
Входные данные
100 8
Выходные данные
256
Входные данные
100 2
Выходные данные
104
我执行此任务的代码:
X, L = map(int, input().split())
cnt = 10**20
maximum = int(X**(1/L)) + 1
a = [1]*(maximum + 1)
a[0] = 0
a[1] = 0
i = 0
while i <= maximum:
while not a[i]:
i += 1
if i > maximum:
break
else:
k = i**L
cnt = min(X - (X%k) + k, cnt)
for j in range(i*i, maximum + 1, i):
a[j] = 0
i += 1
print(cnt)
我的解决方案的简要说明:
Ввожу входные данные, если L равно единице, то мы сразу
можем дать ответ, это X+1, иначе мы создаём заведомо
очень большую переменную cnt (, в которой хранится ответ,
потом проходимся циклом while, если в какой-то момент
i нам подходит, то заканчиваем цикл, иначе, обновляем
cnt, вспомогательный массив (он нужен для того, чтобы
искать ответ во вложенном while) заполняем нулями
(то есть потенциальными ответами) в интервале от i^2 до
maximum+1 с шагом в i, в конце программы выводим
получившийся ответ, который лежит в cnt
但是检查系统写道代码在测试5上产生执行错误(复制判决:测试5上的执行错误),请帮忙,我将非常感激,提前感谢!