私はトップコーダーでオイラーの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で分けられます。私が理解できなかったのは、コードの最後の部分です。
if(n > 1) result -= result/n;
nが、この段階では1よりも大きいnは素数になる場合私が知っていることです。私が知りたいのは、もし私が今までこのコードから理解していることが正しいとすれば、このコードの背後にある正確な理論です。