hdu_3501_欧拉函数

 

//欧拉公式的延伸:一个数的所有质因子之和是phi(n)*n/2,phi是欧拉函数

//欧拉函数:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。

 

#include<iostream> #include<cstdio> #include<cmath> using namespace std; #define mod 1000000007 long long n; long long phi(long long x) //求欧拉函数 { long long temp=x; int i; long long ans=x; for(i=2;i*i<=x;i++) { if(x%i==0) { ans=ans*(i-1)/i; while(x%i==0) x/=i; } } if(x>1) return ans*(x-1)/x; //x是素数 if(x==temp) return temp-1; //temp是素数 return ans; } int main() { while(scanf("%lld",&n)!=EOF&&n) { long long ans=(n-1)*n/2%mod; //比n小的所有数之和 ans=ans-(phi(n)*n/2)%mod; while(ans<0) ans+=mod; printf("%lld/n",ans%mod); } return 0; } 

 

你可能感兴趣的:(hdu_3501_欧拉函数)