является ли число степенью другого
P.S. Что понимать под "очень большим натуральным числом", кстати? Насколько большое?
Для этого надо перебирать все значения m до квадратного корня из N и делать m*m*m*m.. и так s раз. Можно ли этот алгоритм как-то быстрее? Например, увеличивать не линейно, а квадратично.
Число должно иметь более 1024 разрядов.
а потом почему то обратил внимания на местожительство автора... суровые челябинские программисты
10^100 = 10 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000.
Гугол больше, чем количество частиц в известной нам части Вселенной, которых, по разным оценкам, насчитывается от 10^79 до 10^81
Прошу прощения, 200 разрядов. Т.к. это нужно для алгоритма Миллера, а наибольшее известное простое число имеет 200 разрядов.
Эмм... я конешно математик никудышный, но сдается, что у гугля 100 нулей после 1 это и есть количество разрядов. А что бы получить 200 разрядов надо гуголь в степень гуголя возвести.
Сам по себе гуголь это просто ибаниститчески большое число, а уж ежели в степень то вообще ппц.
Пусть каждая частица будет хранить единицу от этого числа, тогда понадобиться только для его хранения гуголь вселенных вещества.
встречаются два рыбака: первый говорит:" вчера поймал сома,бросил в багажник, хвост не влез так домой и поехал. Второй"я вчера щуку поймал с меня ростом-распорол живот, а там подсвечник и свечи горят." Первый"слышь я хвост в багажник уберу , но ты свечи затуши"
Я сделал с помощью простого перебора M и S:
string M="1", S="1";
bool factors=true, power=true;
while (factors) {
M++;
result=M;
power=true;
while (power) {
S++;
result=result*M;
if (result>N) {
if (S=="2") {
cout << N << " may be prime"; //N нельзя разложить в степень другого
factors=false;
power=false;
} else {
power=false;
S="1";
}
}
if (result==N) {
power=false;
factors=false;
cout << N << " is not prime N=" << M << "^" << S; //N=M^S
}
}
}
Но этот алгоритм работает очень медленно: например, для числа с 6 разрядами он работает около 3 минут.
S перебирать только по простым числам .