
欧拉定理是数论中一个非常重要的定理:若正整数
这里的
我们稍后再来证明欧拉定理。在算法竞赛中,我们常常会用到它的一个重要的推论:若正整数
(这是因为
利用这个推论,即使
为了解决
这里仍有前提条件,但影响不大,因为
当
当
现在再分类讨论
- 若
,则 :
(注意到
- 若
,则
必然是。设的倍数
,注意到
,可以证明
。则:
所以
综上,
代码实现时可以边读入边取模,另外一定要注意这个式子仅在
#include
附:欧拉定理的群论证明
欧拉定理的初等证明这篇博客讲得很清楚了。这里讲一个我觉得很有意思的群论证明。(需要一点点抽象代数基础)
设
- 封闭性,因为
,故
必与
互质
- 结合律,这是显然的
- 存在单位元
- 对于每个元素
必存在逆元。即模
的乘法逆元(注意
与
互质,故乘法逆元必存在)
所以该代数系统是群。这个群的阶数是
Pecco:算法学习笔记(目录)zhuanlan.zhihu.com