有人可以解释一下,这个欧拉函数是什么意思:
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;
}
我试图制定一个标准的路径来解决这个任务,但它已经超过了时间限制。我找到了对欧拉函数的这种解释,但我无法理解。为什么我们不迭代i*i<n
,循环i<n
中发生了什么while
等等。我知道我们可以将欧拉函数写为f(n) = n * (1-1/p1)(1-1/p2)...(1-1/pk)
,其中pi
是质数,但我不明白这段代码是如何工作的。