• Предмет: Информатика
  • Автор: robertkalentyev2
  • Вопрос задан 6 лет назад

C++. Степень.

Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется только число A.

Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.

Входные данные

Во входных данных содержится единственное число A
(1≤A≤109 — на всякий случай; вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).

Выходные данные

Выведите число N.


ilai2541358: Эх,Роберт... Надоело тебе думать как и мне :)
fkid2006: Кто 100% решил это на с++?
ilai2541358: Я.
fkid2006: уже поздно :(

Ответы

Ответ дал: maxpavlutenkof
0

#include <iostream>

#include <math.h>

int f(int a)

{

for (int n = 1; n <= a; n++)

{

double b = (double)a / n;

if ((int)b == b)

{

b = pow(n, n) / a;

if ((int)b == b)

return n;

}

}

return a;

}

int main(int argc, char *argv[])

{

int a;

std::cin >> a;

std::cout << f(a);

}


robertkalentyev2: Спасибо конечно, но оно слишком медленное
maxpavlutenkof: То есть сложность On это так медленно? Или может ты думаешь, что можно найти нок без цикла?
maxpavlutenkof: Панимаю...
ilai2541358: Это медленно,если требуется О(log√n)
maxpavlutenkof: возможно я чего-то не понимаю, но как ты сдесь собрался получить O(log n)/2?
maxpavlutenkof: в лучшем случае, ты можешь рассмотреть функцию f(x)/a = round(f(x)/a), но она тоже даст множество решений, из которого надо будет найти наименьшее целое
maxpavlutenkof: так что могу только пожелать удачи ;) (вам не кажется, что для 109 можно хоть перебор бахнуть(: )
fkid2006: есть конктретное решение, чтоб в сириусе сказал "Верно"?
fkid2006: на с++
Вас заинтересует