利用欧拉函数解决最大公约数相关问题

本文探讨了欧拉函数如何用于解决与最大公约数相关的问题,包括欧拉定律及其在质数情况下的特殊情况——费马小定理。接着,提供了两个实例:一是计算1到n之间每个数与n的最大公约数之和;二是求1到n中所有数的最大公约数之和。并给出了相应的代码实现。
摘要由CSDN通过智能技术生成
一、欧拉函数与最大公约数
欧拉函数phi(i)表示在[1~i)中,与i互质的数的个数。
如要求1-n中所有数与n的最大公约数的和。
设count(x)为1-n中,与n的最大公约数为x的个数,即gcb(i,n)=x,i的个数。(gcb(x,y)为x和y的最大公约数)
这个count(x)怎么求呢?
有gcb(i,n)=x,则gcb(i/x,n/x)=1,(如果为k,k!=1,则gcb(i,n)=k*x)。
则count(x)=phi(n/x)。因为这些数既然与n/x互质,则将这些数乘以x,则得到的数肯定与n最大公约数为x。
这样,我们就将n以内与n互质的数的个数(欧拉函数),转换为与n最大公约数为x的个数


二、欧拉函数与代码

在知道了欧拉函数这么强大之后,我们来看看怎么求它。
维基百科上:
n = p_1^{k_1} p_2^{k_2} \cdots p_r^{k_r}
\varphi(n) = \prod_{i=1}^r p_i^{k_i-1}(p_i-1) = \prod_{p\mid n} p^{\alpha_p-1}(p-1) = n\prod_{p|n}\left(1-\frac{1}{p}\right)
例如 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值