欧拉函数公式推导及筛法实现

x = ∑ i = 1 p i k i x=\sum_{i=1}p_i^{k_i} x=i=1piki p i p_i pi x x x 的第 i i i 个质因子, k i > 0 k_i>0 ki>0
则 欧拉函数 φ ( x ) = x ∗ ∏ i = 1 ( 1 − 1 p i ) \varphi (x) = x*\prod_{i=1}(1-\frac{1}{p_i}) φ(x)=xi=1(1pi1)
证明:
欧拉函数即小于 n n n 且与 n n n 互质的数的个数,由容斥原理得
φ ( x ) = n − ∑ n p i + ∑ n p i p j − ∑ n p i p j p k + . . . \varphi (x) = n-\sum\frac{n}{p_i}+\sum\frac{n}{p_ip_j}-\sum\frac{n}{p_ip_jp_k}+... φ(x)=npin+pipjnpipjpkn+...,化简即得上式。

筛法求欧拉函数:
线性筛中用每个合数的最小质因子筛掉它,可以通过这点去求出每个数的欧拉函数,设当前合数为 x x x,则
x = p 1 k 1 p 2 k 2 p 3 k 3 . . . x = p_1^{k_1}p_2^{k_2}p_3^{k_3}... x=p1k1p2k2p3k3... p 1 p_1 p1 为最小质因子, k > 0 k>0 k>0
φ ( x ) = x ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) ( 1 − 1 p 3 ) . . . \varphi (x) = x(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_3})... φ(x)=x(1p11)(1p21)(1p31)...
t = x / p 1 t = x/p_1 t=x/p1
当t中含有质因子 p 1 p_1 p1 时,
φ ( t ) = t ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) ( 1 − 1 p 3 ) . . . \varphi (t) = t(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_3})... φ(t)=t(1p11)(1p21)(1p31)...
容易看出 φ ( x ) = φ ( t ) ∗ p 1 \varphi (x) =\varphi (t)*p_1 φ(x)=φ(t)p1
当t中不含有质因子 p 1 p_1 p1 时,
φ ( t ) = t ( 1 − 1 p 2 ) ( 1 − 1 p 3 ) . . . \varphi (t) = t(1-\frac{1}{p_2})(1-\frac{1}{p_3})... φ(t)=t(1p21)(1p31)...
φ ( x ) = φ ( t ) ∗ p 1 ∗ ( 1 − 1 p 1 ) = φ ( t ) ∗ ( p 1 − 1 ) \varphi (x) =\varphi (t)*p_1*(1-\frac{1}{p_1}) = \varphi (t)*(p_1-1) φ(x)=φ(t)p1(1p11)=φ(t)(p11)
此处的 t t t 即为以下代码中的 i i i

int p[N], phi[N], cntp;
bool isp[N];
void ol(int mx)
{
    memset(isp, true, sizeof(bool) * (mx + 1));
    isp[0] = isp[1] = false;
    phi[1] = 1;
    for (int i = 2; i <= mx; i++)
    {
        if (isp[i])
        {
            p[++cntp] = i;
            phi[i] = i - 1;
        }
        for (int j = 1; p[j] <= mx / i; j++)
        {
            int x = p[j] * i;
            isp[x] = false;
            if (i % p[j] == 0)
            {
                phi[x] = phi[i] * p[j];
                break;
            }
            else phi[x] = phi[i] * (p[j] - 1);
        }
    }
}

应用:
对于互质的两个正整数 a , n a,n a,n 都有 a φ ( n ) ≡ 1   ( m o d   n ) a^{\varphi{(n)}}\equiv 1\ (mod \ n) aφ(n)1 (mod n)
证明:设1到n中与n互质的数为
b 1 , b 2 , . . . , b φ ( n ) b_1,b_2,...,b_{\varphi{(n)}} b1,b2,...,bφ(n)
将其中每个数乘以a并取模n后得到新的数组
a b 1 % n , a b 2 % n , . . . , a b φ ( n ) % n ab_1\%n,ab_2\%n,...,ab_{\varphi{(n)}}\%n ab1%n,ab2%n,...,abφ(n)%n

新生成的数组中没有相同的数,这个用反证法证明,
假设有两个数相同即
a b i ≡ a b j ab_i\equiv ab_j abiabj
得到 b i ≡ b j b_i\equiv b_j bibj,与前提矛盾,得证。

对于新的数组,其中没有相同的数,同时所有数还是与n互质的,所以两个数组是相同的集合,就只是排列顺序不同,所以两个数组的乘积同余,即
∏ i = 1 φ ( n ) b i ≡ ∏ i = 1 φ ( n ) a b i   ( m o d   n ) \prod_{i=1}^{\varphi{(n)}} b_i \equiv \prod_{i=1}^{\varphi{(n)}} ab_i \ (mod \ n) i=1φ(n)bii=1φ(n)abi (mod n)
∏ i = 1 φ ( n ) b i ≡ a φ ( n ) ∏ i = 1 φ ( n ) b i   ( m o d   n ) \prod_{i=1}^{\varphi{(n)}} b_i \equiv a^{\varphi{(n)}}\prod_{i=1}^{\varphi{(n)}} b_i \ (mod \ n) i=1φ(n)biaφ(n)i=1φ(n)bi (mod n)
所以: a φ ( n ) ≡ 1   ( m o d   n ) a^{\varphi{(n)}}\equiv 1\ (mod \ n) aφ(n)1 (mod n)
证毕。

如有错误欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值