方法一:应用公式
一个trick是for循环的条件不断改变,同时保证最多只有一个n的素因子不会被for遍历到。这样大大降低了复杂度((O(sqrt{n})))。
int phi(int n)
{
int ret=n;
for(int i=2;i<int(sqrt(n))+1;++i)
{
if(n%i==0)ret=ret/i*(i-1);
while(n%i==0)n/=i;
}
if(n>1)ret=ret/n*(n-1);
return ret;
}
--最后修改于:2018/08/28--