欧拉函数

来源:互联网 发布:查看公司屏蔽的端口 编辑:程序博客网 时间:2024/04/29 09:23

在数论中,对于一整数n来说,欧拉函数是指:1~n-1中与n互质的数的个数。又称φ函数、欧拉商数等。
例如φ(8)=4,因为1,3,5,7均和8互质。
从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。 

  φ函数的值 
  φ(1)=1(唯一和1互质的数就是1本身)。 
若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。 
  欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。
  证明:设A, B, C是跟m, n, mn互质的数的集,据中国剩余定理,A*B和C可建立一一对应的关系。因此φ(n)的值使用算术基本定理便知, 
  若n= ∏p^(α(下标p))
  p|n 
  则φ(n)=∏(p-1)p^(α(下标p)-1)=n∏(1-1/p)
  p|n p|n 
  例如φ(72)=φ(2^3×3^2)=(2-1)2^(3-1)×(3-1)3^(2-1)=24
  与欧拉定理、费马小定理的关系 
  对任何两个互质的正整数a, m, m>=2有 
  a^φ(m)≡1(mod m)
  即欧拉定理 
  当m是质数p时,此式则为: 
  a^(p-1)≡1(mod m)

  即费马小定理。

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int Euler(int n)
{
int i;
int result;

result=n;

for(i=2; n!=1; i++)
{
   if(n%i)
    continue;
   else
    result=result/i*(i-1);   //(p-1)*p^(k-1)
   
   while(n%i==0)
    n/=i;
  
}

return result;

}


int main()
{
int n;
while(scanf("%d",&n) && n)
{
    
   printf("%d\n",Euler(n));
}
return 0;

}


原创粉丝点击