【求1~n中所有数的欧拉phi函数值】
void get_phi()
{
memset(phi,0,sizeof(phi));
phi[1] = 1;
for(int i = 2; i <= MAXN; i++)
{
if(phi[i]) continue;
for(int j = i; j <= MAXN; j += i)
{
if(!phi[j]) phi[j] = j;
phi[j] -= phi[j]/i;
}
}
}
【求单个数的欧拉函数】
long long eular(long long n)
{
long long ans = n;
int m = sqrt(n+0.5);
for (int i = 2; i <= m; i++)
{
if (n % i == 0)
{
ans -= ans / i;
while (n % i == 0)
n /= i;
}
}
if (n > 1)ans -= ans / n;
return ans;
}