我们现在就来学习数论四大定理中的最后一个定理,欧拉定理。
首先我们先介绍一下什么是欧拉函数,欧拉函数
求的是不超过n且与n互素的正整数的个数,例如:
,
。
具体的欧拉公式如下:
这里的
指的是
的所有质因子(特别注意:每个因子在套用欧拉公式的个数为一个)。
举个例子:
,那么转化为其欧拉公式则为:
之后我们再来介绍下欧拉定理及其推论:
欧拉定理:如果n和a是互素的正整数,则
推论:如果n和a是互素的正整数,则
准确的说欧拉定理在信息学最大的应用就是欧拉降幂
然后我们就可以开始讲欧拉降幂啦!下式就是欧拉降幂的公式:
(其中
就是欧拉公式)
那么,我们怎么用代码实现呢
答案是:欧拉公式
快速幂,下面我们给出其模板代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ouler(ll n) //欧拉公式
{
ll ans = n;
ll a = n;
for(int i=2;i*i<=n;i++)
{
if(a % i == 0)
{
ans = ans/i*(i - 1);
while(a%i == 0)
a /= i;
}
}
if(a > i)
ans = ans/a*(a - 1);
return ans;
}
ll fast(ll a, ll b, ll mod) //快速幂
{
ll res = 1;
while(b)
{
if(b & 1)
res = (res * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return res;
}
这里只是给出了简易的的欧拉降幂模板,具体是实践可以参考2019年icpc
南京网络赛的B题,如果你能知晓欧拉降幂,那么这题做起来将会非常简单。