int phi (int n) {
int result = n;
for (int i=2; i*i<=n; ++i)
if (n % i == 0) {
while (n % i == 0)
n /= i;
result -= result/i;
}
if (n > 1)
result -= result/n;
return result;
}
я увидел над осуществлением Эйлера функции фи которая из O (SQRT п) .Я не получают факт использования i*i<=n
в for
цикле и необходимость от изменения n
. Говорят, что это можно сделать за меньшее время O (sqrt n) Как? link (in Russian)Расчет функции Эйлера фи
Что означает лучший алгоритм для поиска факторов? .Plz упоминает имя алгоритма – DCoder
Алгоритмы rho и p-1, SQUFOF, непрерывные дроби, алгоритм эллиптической кривой, квадратичное сито, сито с числовым полем и многие другие которые не приходят на ум в данный момент. Остерегайтесь того, что некоторые из них работают только в руках экспертов. – user448810
@DCoder Почему бы не перейти по ссылке на странице, которую вы указали сразу после того, как она говорит, что вы можете найти phi «быстрее, чем O (sqrt (n))?» Эта ссылка отвечает на вопрос, который не должен удивлять, потому что он также говорит «эффективные алгоритмы факторинга». Он описывает такие вещи, как факторизация Полларда, которая превосходит пробное деление на 20 + цифр. Я не понимаю, как вы могли прочитать эту страницу и не захотеть следовать ссылкам на ней. –