题目描述
给出一个n,求1~n中有多少个数与n互为互质数。
简要分析
欧拉函数 O(n)=n(1-1/P1)(1-1/P2)…(1-1/Pn) ,其中P1…Pn为n的质因子,求出来的结果就是题目所求。
ac代码
#include <iostream>//原理:o(n)=n*(1-1/p1)+...+(1-1/pn)p1...pn表示为n的质因子.
using namespace std;
int main()
{
int n,res;
cin>>n;
res=n;
for(int i=2;i*i<=n;i++){
if(n%i==0){
res=res/i*(i-1);//先除后乘,避免溢出。
while(n%i==0){
n/=i;
}
}
}
if(n>1){
res=res/n*(n-1);
}
cout<<res<<endl;
return 0;
}