欧拉函数的值 = 不超过m 并且 和m互质 的数的个数
/*
求欧拉函数的值 O(sqrt(n))
*/
int euler_phi(int n){
int res = n;
for(int i = 2; i * i <= n; i++){
if(n % i == 0){
res = res / i * (i-1);
for(; n % i == 0; n /= i);
}
}
if(n != 1) res = res / n * (n-1);
return res;
}
/*
O(n)时间复杂度 筛出欧拉函数的表
*/
int euler[maxn];
void euler_phi2(){
for(int i = 0; i < maxn; i++) euler[i] = i;
for(int i = 2; i < maxn; i++){
if(euler[i] == i){
for(int j = i; j < maxn; j += i) euler[j] = euler[j]/i*(i-1);
}
}
}