欧拉公式

来源:互联网 发布:php return exit 编辑:程序博客网 时间:2024/05/06 16:47

 

欧拉公式

欧拉φ函数:φ(n)是所有小于n的正整数里,和n互素的整数的个数。n是一个正整数。

  欧拉证明了下面这个式子:

  如果n的标准素因子分解式是p1^a1*p2^a2*……*pm^am,其中众pj(j=1,2,……,m)都是素数,而且两两不等。则有

 

  φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pm)

如果n为奇素数,φ(n)=n-1.

 

费马小定理:a^(p-1)≡1(mod p)

 

 

POJ 2407 求一个数的欧拉函数值

Source Code

Problem: 2407 User: pbjMemory: 228K Time: 16MSLanguage: C++ Result: Accepted
  • Source Code
  • #include <iostream>#include <cmath>using namespace std;unsigned euler(unsigned x){unsigned i,res=x;for(i=2;i<(int)sqrt(x*1.0)+1;i++)if(x%i==0){res=res/i*(i-1);while(x%i==0)x/=i;}if(x>1)res=res/x*(x-1);return res;}int main(){int n;while(cin>>n && n){printf("%d/n",euler(n));}return 0;}
poj 2478 欧拉函数求和

Source Code

Problem: 2478 User: pbjMemory: 13272K Time: 32MSLanguage: C++ Result: Accepted
  • Source Code
  • #include <iostream>#define MAX 1000000using namespace std;int prime[MAX+1],phi[MAX+1];long long sum[MAX+1];bool isprime[MAX+1];void get_phi(){int i,j,len=0;for(i=2;i<=MAX;i++){if(!isprime[i]){prime[++len]=i;phi[i]=i-1;}for(j=1;j<=len && prime[j]*i<=MAX;j++){isprime[prime[j]*i]=1;if(!(i%prime[j])){phi[i*prime[j]]=phi[i]*prime[j];break;}elsephi[i*prime[j]]=phi[i]*(prime[j]-1);}}}int main(){int i,n;get_phi();phi[1]=0;for(i=2;i<=MAX;i++)sum[i]=sum[i-1]+phi[i];while(cin>>n && n){cout<<sum[n]<<endl;}return 0;}