欧拉函数|(扩展)欧拉定理|欧拉反演

本文深入解析欧拉函数的定义、性质及其应用,包括其作为积性函数的特点、欧拉反演的应用,以及如何通过线性筛法高效计算。同时,详细阐述了欧拉定理与扩展欧拉定理的证明过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

也许更好的阅读体验

欧拉函数

  • 欧拉函数是 小于 n的数中与n 互质 的数的 数目
    符号\(\varphi(x)\)
    互质 两个互质的数的最大公因数等于1,1与任何数互质

  • 通式
    \(\varphi(x)=x\prod_{i=1}^n(1-\frac{1}{p_i})\)
    其中\(p_i\)\(n\)的质因子


常用性质

  • \(n\)为质数,显然\(\varphi(n)=n-1\)
    \(\begin{aligned}\end{aligned}\)
  • 欧拉函数是积性函数
    积性函数: 对于任意 互质 的整数\(a\)\(b\)有性质\(f(ab)=f(a)·f(b)\)的数论函数。
    \(m,n\)互质,\(\varphi(mn)=\varphi(m)·\varphi(n)\)
    \(\begin{aligned}\end{aligned}\)
  • 如果\(x=2n\)(\(n\)为奇数),\(\varphi(x)=\varphi(n)\)\(\varphi(2n)=\varphi(n)\)(\(n\)为奇数)
    n为奇数时,n与2互质,\(\varphi(2)=1\)
    \(\begin{aligned}\end{aligned}\)
  • \(p\)为质数,则\(\varphi(p^k)=p^k-p^{k-1}\)
    因为与\(p^k\)不互质的只有\(p\)的倍数,而\(p^k\)\(p\)的倍数有\(p^{k-1}\)
    \(\begin{aligned}\end{aligned}\)
  • \(x>2\)时,\(\varphi(x)\)为偶数
    这一点需要了解更相减损术 即\(gcd(n,x)=gcd(n,n-x)\)
    由该公式我们可以知道,所有与\(n\)互质的数都是成对出现的
    \(\begin{aligned}\end{aligned}\)
  • 小于n的数中,与n互质的数的总和为\(\varphi(n)*n/2\ \ (n>1)\)
    由上面的证明(更相减损术)我们知道,每一对与\(n\)互质的数的和为\(n\),共有\(\varphi(n)/2\)
    \(\begin{aligned}\end{aligned}\)
  • \(n=\sum_{d|n}\varphi(d)\)\(n\)的因数\((\)包括\(1\)和它自己\()\)的欧拉函数之和等于\(n\)
    这条性质的运用又叫 欧拉反演
    定义函数
    \(\begin{aligned}f(n)=\sum_{d|n}\varphi(d)\end{aligned}\)
    • \(f(n)\)为积性函数
      \(\begin{aligned}f(n)·f(m)=\sum_{i|n}\varphi(i)\sum_{j|m}\varphi(j)=\sum_{i|n}\sum_{j|m}\varphi(i)·\varphi(j)=\sum_{i|n}\sum_{j|m}\varphi(i·j)=\sum_{d|nm}\varphi(d)=f(nm)\end{aligned}\)

    \(f(p^k)=\varphi(1)+\varphi(p)+\varphi(p^2)+\cdots+\varphi(p^k)=1+(p-1)+(p^2-p)+\cdots+(p^k-p^{k-1})=p^k\)

    \(n=p_1^{k_1} ·p_2^{k_2}· \cdots·p_m^{k_m}\)

    \(f(n)=f(p_1^{k_1})·f(p_2^{k_2})·\cdots·f(p_m^{k_m})=p_1^{k_1} ·p_2^{k_2}· \cdots·p_m^{k_m}=n\)
    \(\begin{aligned}\end{aligned}\)


欧拉定理

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

  • 证明
    • 剩余系 指对于某一个特定的正整数\(n\),一个整数集中的数\(mod\ n\)所得的余数域。
    • 完全剩余系\(m\in Z+\),若\(r_0,r_1,...r_{m−1}\)\(m\)个整数,并且两两模\(m\)不同余,则\(r_0,r_1,...r_{m−1}\)叫作模\(m\)的一个完全剩余系。
    • 缩系\(A\)\(mod\ n\)的剩余系,若任意\(A\)中两个元素相乘\(mod\ n\)后仍为\(A\)中的元素,则称\(A\)\(mod\ n\)的缩系
    • \(a,m\)互质,则\(m\)的一个缩系为\(\{a,2a,3a...\varphi(m)a\}\)
      \(\varphi(m)! ≡ \prod^{\varphi(m)}_{i=1}a_i(mod\ m)\)
      \(\varphi(m)! ≡ a^{\varphi(m)}·\varphi(m)!(mod\ m)\)
      \(a^{\varphi(m)}≡1(mod\ m)\)
      • 而当\(m\)为质数时,\(\varphi(m)=m-1\)
        \(a^{(m-1)}≡1(mod\ m)\)
        这就是我们熟知的 费马小定理

扩展欧拉定理

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

  • 证明
    \(m\)中提一个质因子\(p\)出来 令\(m=p^k·s\)
    \(gcd(p^k,s)=1\),即\(p^k,s\)互质
    根据欧拉定理,我们知道\(p^k≡p^{\varphi(s)}≡1(mod\ s)\)
    根据欧拉函数是积性函数,我们知道\(\varphi(s)|\varphi(m)\)所以有\(p^{\varphi(m)}≡p^{\varphi(s)}(mod\ s)\)
    \(p^{\varphi(s)}=xs+1\)
    那么\(p^{\varphi(s)+k}=xm+p^k\)
    所以\(p^{\varphi(s)+k}≡p^k (mod\ m)\),也有\(p^{\varphi(m)+k}≡p^k (mod\ m)\)
    \(b>=k\)时,\(p^b≡p^{b-k}·p^k≡p^{b-k}·p^{\varphi(s)+k}≡p^{b+\varphi(m)}(mod\ m)\)
    又因为\(k<=\varphi(p^k)<=\varphi(m)\),所以当\(b>=2\varphi(m)\)时,满足\(p^b≡p^{b-\varphi(m)}(mod\ m)\)
    注意是\(2\varphi(m)\)!
    所以可以得到\(p^b≡p^{b\%\varphi(m)+\varphi(m)}(mod\ m)\)
    因此我们可以得到对任意质数\(p\)都有\(b>=2\varphi(m),p^b≡p^{b\%\varphi(m)+\varphi(m)}(mod\ m)\)
    \(m\)质因子的\(p\),有欧拉定理
    \(a\)因式分解,可以得到
    \(a^b≡a^{b\%\varphi(m)+\varphi(m)}(mod\ m)\)
    • 注意 \(b<\varphi(m)\)时,公式不一定成立

线性筛法

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

int cnt;
int prime[maxn],phi[maxn];
bool vis[maxn];
void Euler_sieve (int n)
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}\)


如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧

转载于:https://www.cnblogs.com/Morning-Glory/p/11106828.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值