【发布时间】:2017-04-12 13:45:12
【问题描述】:
我在 topcoder 上找到了欧拉 phi 函数的实现。代码如下:
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 将是一个素数。我想知道,到目前为止我从这段代码中所理解的内容是否正确以及这段代码背后的确切理论。
【问题讨论】: