1 利用欧拉函数打表
#include<stdio.h>
#define maxn 1000000+1
int minDiv[maxn], phi[maxn];
void getPhi()
{
for(int i = 1; i < maxn; i++)
{
minDiv[i] = i;
}
for(int i = 2; i*i < maxn; i++)
{
if(minDiv[i] == i)
{
for(int j = i*i; j < maxn; j+=i)
{
minDiv[j] = i;
}
}
}
phi[1] = 1;
for(int i = 2; i < maxn; i++)
{
phi[i] = phi[i/minDiv[i]];
if(i/ minDiv[i] % minDiv[i] == 0)
{
phi[i] *= minDiv[i];
}
else
{
phi[i] *= minDiv[i]-1;
}
}
}
int main()
{
getPhi();
int n;
scanf("%d", &n);
while(n--)
{
int tmp;
scanf("%d", &tmp);
printf("%d\n", phi[tmp]);
}
return 0;
}