欧拉函数

欧拉函数

φ函数的定义:设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值,这里函数φ:N→N,n→φ(n)称为欧拉函数。

例如φ(8)=4,因为1,3,5,7均和8互质。 


φ函数的值通式:

φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)

(其中p1, p2……pn为x的所有质因数,x是不为0的整数)。

φ(1)=1(唯一和1互质的数就是1本身)。

注意:每种质因数只有一个(比如12=2*2*3,那么φ(12)=12*(1-1/2)*(1-1/3)=4)

若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)。

  

φ函数的性质:

1.若m,n互质,φ(mn)=φ(m)φ(n)。

2.当n为奇数时,φ(2n)=φ(n)。

3.对于素数p,φ(p) = p -1 。
4.对于两个不同素数p,q ,它们的乘积n=p*q满足φ(n) = (p -1)*(q -1)  

5.快速求出欧拉函数的值(a为N的质因数)  
  若(N%a==0 && (N/a)%a==0) 则有:E(N)=E(N/a)*a;  
  若(N%a==0 && (N/a)%a!=0) 则有:E(N)=E(N/a)*(a-1);


φ函数的编程实现:

复制代码
   
   
#include < stdlib.h >
#include
< stdio.h >
#define N 10000001
int main()
{
int i,j;
char prime[M];
__int64 phi[M];

prime[
0 ] = prime[ 1 ] = 0 ;
for (i = 2 ;i <= N;i ++ )
prime[i]
= 1 ;
for (i = 2 ;i * i <= N;i ++ )
{
if (prime[i])
{
for (j = i * i;j <= N;j += i)
prime[j]
= 0 ;
}
}
// 这段求出了N内的所有素数

for (i = 1 ;i <= N;i ++ )
phi[i]
= i;
for (i = 2 ;i <= N;i ++ )
{
if (prime[i])
{
for (j = i;j <= N;j += i)
phi[j]
= phi[j] / i * (i - 1 );
}
}
for (i = 1 ;i < N;i ++ )
printf(
" %d %I64d\n " ,i,phi[i]);
return 0 ;
}
复制代码

 

//下面是两种求欧拉函数的不同编程方法:

/*==================================================*\
|递推求欧拉函数phi(i)
\*==================================================*/

void eular(int n)
{
  int i;
  for(i=2;i<=n;i++)  phi[i]=0;
  ph[1]=1;	  
  for(i=2;i<=n;i++)
  {
    if(phi[i]==0)
	{
	 for(j=i;j<=n;j+=i)
	 {
	  if(phi[j]==0)  phi[j]=j;
	  phi[j]=phi[j]/i*(i-1);
	 }
	}
  }
}


/*==================================================*\n     
|单独求欧拉函数phi(x)
\*==================================================*/

int euler(unsigned x)
{
    int i, res=x;
    for (i=2;i*i<=x;i++)
	{
	   if(x%i==0) 
	  {
       res=res/i*(i-1);
       while(x%i==0)          // 保证i一定是素数
		  x/=i;
	  }                
	}
    if(x>1) 
		res=res/x*(x-1);
    return res;
}


欧拉定理 :对于互质的正整数a和n,有a^φ(n)≡1(mod n)。

费马定理 : 对于正整数a和质数n,有a^(n-1)≡1(mod n)。


*****************************************
补充:欧拉函数公式
( 1 ) p^k 的欧拉函数
对于给定的一个素数p,φ(p)= p -1。

则对于正整数 n = p^k ,φ(n)= p^k - p^(k-1).

( 2 ) p * q 的欧拉函数
假设p, q是两个互质的正整数,则 p*q 的欧拉函数为

φ(p * q) = φ(p) * φ(q)。(gcd(p,q)=1) 



( 3 ) 任意正整数的欧拉函数
任意一个整数 n 都可以表示为其素数因子的乘积为:
     I
n =
 pi^k*i (I为n的素数因子的个数)
    i=1

根据前面两个结论,很容易得出它的欧拉函数为: 
        I                        I
 Φ(n)=
 pi^(k-1)*i*(pi -1)= n*(1 - 1 / pi)
       i=1                      i=1
对于任意 n > 2,2 | Φ(n) ,因为必存在  pi -1 是偶数。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值