C++. Степень.
Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу — для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году и от ученика к ученику меняется только число A.
Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.
Входные данные
Во входных данных содержится единственное число A
(1≤A≤109 — на всякий случай; вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).
Выходные данные
Выведите число N.
ilai2541358:
Эх,Роберт... Надоело тебе думать как и мне :)
Кто 100% решил это на с++?
Я.
уже поздно :(
Ответы
Ответ дал:
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);
}
Спасибо конечно, но оно слишком медленное
То есть сложность On это так медленно? Или может ты думаешь, что можно найти нок без цикла?
Панимаю...
Это медленно,если требуется О(log√n)
возможно я чего-то не понимаю, но как ты сдесь собрался получить O(log n)/2?
в лучшем случае, ты можешь рассмотреть функцию f(x)/a = round(f(x)/a), но она тоже даст множество решений, из которого надо будет найти наименьшее целое
так что могу только пожелать удачи ;) (вам не кажется, что для 109 можно хоть перебор бахнуть(: )
есть конктретное решение, чтоб в сириусе сказал "Верно"?
на с++
Вас заинтересует
2 года назад
3 года назад
3 года назад
8 лет назад
9 лет назад