Я нашел реализацию phi-функции эйлера на topcoder. Код приведен ниже:Теория за реализацией функции функции Филера
int fi(int n) {
int result = n;
for(int i=2;i*i <= n;i++) {
if (n % i == 0) result -= result/i;
while (n % i == 0) n /= i;
}
if (n > 1) result -= result/n;
return result;
}
Я хочу знать точную теорию этой реализации. Я понимаю, что если я получу целое число, делящее n, то я вычитаю result/i
из результата (я не знаю почему). Затем код делит n на i, пока он не делится. То, что я не понял, является последней частью кода.
if(n > 1) result -= result/n;
Я знаю, что если n на этом этапе больше 1, то n будет простым числом. Я хочу знать, если то, что я понимаю из этого кода, является правильным и точной теорией этого кода.