Помогите решить задачу. Степени
Пробовал много вариантов, но все они не укладывались в отведённое время. На мой взгляд этот самый близкий к решению. Всё что находил в Google тоже не работало.
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется только число A.
Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.
Входные данные:
Во входном файле содержится единственное число A (1≤A≤10⁹ — на всякий случай; вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).
Выходные данные:
В выходной файл вывести единственное число N.
Примеры
Ввод 8 Вывод 4
Ввод 1 Вывод 1
def mn(n):
lst = []
i = 2
while n != 1:
if n % i == 0:
n = n // i
lst.append(i)
continue
i += 1
return lst
x = int(input())
r = mn(x)
y = 2
for i in range(1, len(r)):
if r[i] != r[i - 1]:
y = r[i] * y
i += 1
if x == 1:
print(1)
else:
if y >= 29:
print(y)
else:
for k in range(2, 28):
if x % (y * k) == 0:
print(k * y)
break
k += 1
Ответы (3 шт):
def Factor(n):
Ans = []
d = 2
while d * d <= n:
if n % d == 0:
Ans.append(d)
n //= d
else:
d += 1
if n > 1:
Ans.append(n)
return Ans
lst = Factor(int(input()))
s = set(lst)
num = 1
for i in s:
a = lst.count(i)
temp = i
while temp < a:
a = a % 2 + a // 2
temp *= i
num *= temp
print(num)
def f(a):
lst = []
i = 2
while a != 1:
if a % i == 0:
lst.append(i)
a /= i
continue
i += 1
return lst
a = int(input())
b = f(a)
n = 1
for i in set(b):
n *= i
for i in b:
if (n * i) ** (n * i) % a == 0:
print(i * n)
break
else:
print(None)
Представляю относительно краткое решение:
def minimum_number(number_A):
list_ = []
for number in range(1, int(number_A ** 0.5) + 1):
if not (number_A % number):
list_.append(number)
list_.append(number_A // number)
for element in sorted(list_):
if element ** element >= number_A:
return element
print(minimum_number(int(input())))