欧拉函数(C语言实现)

欧拉函数(Euler's totient function)是指小于n的正整数中与n互质的数的数目,用φ(n)表示。特别的,φ(1)=1;

例如:φ(10)=4;1 3 7 9与10互质。

 

公式:φ(n)=n*(1-1/p(1))*(1-1/p(2))*(1-1/p(3))*...*(1-1/p(n)),其中p(1),p(2),p(3)...p(n)为n的所有质因数,每个质因数只能出现一次。

例如:φ(8)=8*(1-1/2)=4;1 3 5 7与8互质

           φ(10)=10*(1-1/2)*(1-1/5)=4;1 3 7 9与10互质

 

性质:

1.若n为质数,则φ(n)=n-1;(注意1非素数也非合数)例如φ(7)=7-1=6;1 2 3 4 5 6(除7外)均与7互质

2.若p为质数,n=p^k,则φ(n)=p^k-p^(k-1)=(p-1)*(p^(k-1)); 例如φ(9)=φ(3^2)=3^2-3^1=(3-1)*(3^(2-1))=6;1 2 4 5 7 8均与9互质

3.若m,n互质,则φ(m*n)=φ(m)*φ(n)=(m-1)*(n-1);

引申:φ(2*n)=φ(2)*φ(n)=(2-1)*φ(n)=φ(n);

 

欧拉定理:

若a,n为正整数且a,n互质,则a^φ(n) ≡ 1 (mod n)

费马小定理:

若p为素数且a,p互质,则a^(p-1) ≡ 1 (mod p)

友情链接:

https://baike.baidu.com/item/MOD运算/7885553#4

 

下面放代码:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int eular(int n)
 4 {
 5     int res=n;
 6     for(int i=2;i<=sqrt(n);i++)//判断n是否为质数
 7     {
 8         if(n%i==0)res=res/i*(i-1);//res=res*(1-1/i)先进行除法防止溢出 
 9         while(n%i==0)n/=i;
10     }
11     if(n>1)res=res/n*(n-1);
12     return res;
13 }
14 int main()
15 {
16     int n;
17     scanf("%d",&n);
18     printf("%d",eular(n));
19     return 0;
20 }

 

谢谢观看,如有问题欢迎提出并指正。

转载于:https://www.cnblogs.com/960571726y/p/10573124.html

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值