题目
题意
[1,n]中与n互质的个数。
题解
欧拉函数模版题。先找出n的质因数p1,p2 …… ,如8 = 2 * 2 * 2,12 = 2 * 2 * 3,然后求出欧拉函数phi(n) = n*(1-1/p1)*(1-1/p2) …… 。
代码
#include <iostream>
#include <cmath>
using namespace std;
long long oula(int n){
int temp = n;
long long phi = n;
for(int i=2;i*i<=n;i++){
if(n % i == 0){
phi *= (1 - 1.0/i);
while(n % i == 0) n /= i;
}
}
if(n == temp){
phi--;
}
else if(n != 1){
phi *= (1 - 1.0/n);
}
return phi;
}
int main(){
int a;
while(cin >> a){
if(a == 0)
break;
cout << oula(a) << endl;
}
}