欧拉函数:求1-n-1里跟n互素的数个数
欧拉函数值:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)
,其中p1, p2……pn为x的所有质因数,即既是x的因数又是质数
#include <iostream>
#include <cstdio>
using namespace std;
#define ll long long
#define N 40000
int phi[N]; //素数筛选思想
void init() //递推法:时间复杂度似乎是O(nln n)
{
int i, j;
for(i = 1; i < N; i++) //先标记为素数
phi[i] = i;
for(i = 2; i < N; i++)
if(i == phi[i]) //此时i为素数
for(j = i; j < N; j += i) //i的倍数处理
phi[j] = (phi[j] / i) * (i - 1); //j有因子i,而且i是素数,正是欧拉函数。先除防溢出
}
int main()
{
init();
int n,t;
scanf("%d", &t);
{
while(t--)
{
scanf("%d",&n);
printf("%d\n", phi[n]);
}
}
return 0;
}