欧拉系列(详细证明!)

Morning_Glory

2019-07-14 20:38:00

Algo. & Theory

后台显示没炸,前台看着炸公式了,可以点以下链接去看

也许更好的阅读体验(cnblog)

也许更好的阅读体验(csdn)

文章内容

欧拉函数

欧拉函数常用性质

欧拉定理

a,m互质,a^{\varphi(m)}≡1(mod\ m)

扩展欧拉定理

b>\varphi(m) 即使a,m不互质a^b≡a^{b \%\varphi(m)+\varphi(m)}\left(mod\ m\right)

线性筛法

类似与筛素数,我们在这里利用欧拉函数是积性函数这个性质来筛\varphi

\mathcal{Code}

int cnt;
int prime[maxn],phi[maxn];
bool vis[maxn];
void Euler_sieve (int n)
{
    phi[1]=1;
    for (int i=2;i<=n;++i){
        if (!vis[i])    prime[++cnt]=i,phi[i]=i-1;
        for (int j=1;j<=cnt&&i*prime[j]<=n;++j){
            vis[i*prime[j]]=true;
            if (i%prime[j]==0){ phi[i*prime[j]]=phi[i]*prime[j];break;}
            phi[i*prime[j]]=phi[i]*phi[prime[j]];
        }
    }
} 

欧拉反演

本来没有欧拉反演这个名字的,只不过大家习惯性称之为欧拉反演
所谓欧拉反演其实就是利用欧拉函数的一条性质

\begin{aligned}n=\sum_{d|n}\varphi(d)\end{aligned}

(上面有证明) 我们试着把n换成其他东西试试

\begin{aligned}gcd(i,j)=\sum_{d|gcd(i,j)}\varphi(d)=\sum_{d|i}\sum_{d|j}\varphi(d)\end{aligned}

让我们求个东西试试

\begin{aligned}\sum_{i=1}^ngcd(i,n)=\sum_{i=1}^n\sum_{d|i}\sum_{d|n}\varphi(d)=\sum_{d|n}\sum_{i=1}^n\sum_{d|i}\varphi(d)=\sum_{d|n}\frac{n}{d}\varphi(d)\end{aligned}

把它重写一遍作为结论

\begin{aligned}\sum_{i=1}^ngcd(i,n)=\sum_{d|n}\frac{n}{d}\varphi(d)\end{aligned}

感谢

@Everything_will_die

@bcr_233

@Pour

@渣渣lyz

指出错误,已更正,博主最近电脑被控制,不能及时回复,敬请原谅