【总结】欧拉函数相关

欧拉函数

    对于 n ( n N ) n(n\in N*) φ ( n ) \varphi(n) 表示小于等于 n n 的正整数中与 n n 互质的个数
    例如, φ ( 8 ) = 4 \varphi(8)=4 ,因为1,3,5,7与8互质

以下是几个性质

一、 φ ( p ) = p 1 ( p ) \varphi(p)=p-1(p\in质数)

这是显然的。

二、 φ ( p a ) = ( p 1 ) p a 1 \varphi(p^a)=(p-1)*p^{a-1}

因为可以被 p p 整除的数可以表示为 p t ( t = 1 , 2 , 3 ,   , p a 1 1 ) p*t(t=1,2,3,\cdots,p^{a-1}-1) ,所以与 p a p^a 不互质的数一共有 ( p a 1 1 ) (p^{a-1}-1) 个。
那么, φ ( p a ) = p a 1 ( p a 1 1 ) = φ ( p a ) φ ( p a 1 ) \varphi(p^{a})=p^a-1-(p^{a-1}-1)=\varphi(p^{a})-\varphi(p^{a-1})

φ ( p a ) = ( p 1 ) p a 1 \varphi(p^a)=(p-1)*p^{a-1}

三、 φ ( x ) = x i = 1 t ( 1 1 p i ) ( p i ) \varphi(x)=x*\prod_{i=1}^t(1-\frac{1}{p_i})(p_i\in质数)

现在给定一个数 x x ,根据唯一分解定理
x = p 1 k 1 p 2 k 2 p 3 k 3 p 1 k 1 p t k t x=p_1^{k_1}*p_2^{k_2}*p_3^{k_3}*p_1^{k_1}*\cdots*p_t^{k_t}
根据容斥原理,
φ ( x ) = x x p 1 x p 2 x p t + x p 1 p 2 + x p 1 p 3 + + x p t 1 p t x p 1 p 2 p 3 + \varphi(x)=x-\frac{x}{p_1}-\frac{x}{p_2}-\cdots-\frac{x}{p_t}+\frac{x}{p_1p_2}+\frac{x}{p_1p_3}+\cdots+\frac{x}{p_{t-1}p_t}-\frac{x}{p_1p_2p_3}-\cdots+\cdots
即,
φ ( x ) = x ( 1 1 p 1 1 p 2 1 p t + 1 p 1 p 3 + + 1 p t 1 p t 1 p 1 p 2 p 3 +   ) \varphi(x)=x*(1-\frac{1}{p_1}-\frac{1}{p_2}-\cdots-\frac{1}{p_t}+\frac{1}{p_1p_3}+\cdots+\frac{1}{p_{t-1}p_t}-\frac{1}{p_1p_2p_3}-\cdots+\cdots)
发挥一下想象或者测一下小数据,就可以得到
φ ( x ) = x i = 1 t ( 1 1 p i ) \varphi(x)=x*\prod_{i=1}^t(1-\frac{1}{p_i})

四、 φ ( p ) = φ ( a ) φ ( b ) ( g c d ( a , b ) = 1 ) \varphi(p)=\varphi(a)*\varphi(b)(其中gcd(a,b)=1)

根据唯一分解定理
a = p 1 k 1 p 2 k 2 p 3 k 3 p 1 k 1 p t k t          a=p_1^{k_1}*p_2^{k_2}*p_3^{k_3}*p_1^{k_1}*\cdots*p_t^{k_t}\ \ \ \ \ \ \ \ \cdots\cdots①
b = q 1 k 1 q 2 k 2 q 3 k 3 q 1 k 1 q h k h          b=q_1^{k_1}*q_2^{k_2}*q_3^{k_3}*q_1^{k_1}*\cdots*q_h^{k_h}\ \ \ \ \ \ \ \ \cdots\cdots②
因为 g c d ( a , b ) = 1 gcd(a,b)=1 ,所以①式和②式中任意的 p p q q 都不相等
根据引理三,
φ ( a ) = a i = 1 t ( 1 1 p i )          \varphi(a)=a*\prod_{i=1}^t(1-\frac{1}{p_i})\ \ \ \ \ \ \ \ \cdots\cdots③
φ ( b ) = b i = 1 h ( 1 1 q i )          \varphi(b)=b*\prod_{i=1}^h(1-\frac{1}{q_i})\ \ \ \ \ \ \ \ \cdots\cdots④
③*④ ,得:
φ ( a ) φ ( b ) = a b i = 1 t ( 1 1 p i ) i = 1 h ( 1 1 q i ) \varphi(a)*\varphi(b)=a*b*\prod_{i=1}^t(1-\frac{1}{p_i})*\prod_{i=1}^h(1-\frac{1}{q_i})
x = a b x=a*b ,那么:
φ ( p ) = φ ( a ) φ ( b ) \varphi(p)=\varphi(a)*\varphi(b)
然而,这里是有些问题的,我还不知道 i = 1 t ( 1 1 p i ) i = 1 h ( 1 1 q i ) = i = 1 l ( 1 1 g i )   ( g i x ) \prod_{i=1}^t(1-\frac{1}{p_i})*\prod_{i=1}^h(1-\frac{1}{q_i})=\prod_{i=1}^l(1-\frac{1}{g_i})\ (g_i是x的唯一分解) 但小数据试了是没有问题的。其实显然,因为 a a b b 互质。

五、 φ ( i p ) = φ ( i ) p   ( i   m o d   p = 0 ) \varphi(i*p)=\varphi(i)*p\ (i\ mod\ p=0)

因为若 i   m o d   p = 0 i\ mod\ p=0 ,那么 ( i + p )   m o d   p = 0 (i+p)\ mod\ p=0 。同理:若 i   m o d   p 0 i\ mod\ p\neq0 ,那么 ( i + p )   m o d   p 0 (i+p)\ mod\ p\neq0
所以
φ ( i 2 ) = φ ( i ) 2 \varphi(i*2)=\varphi(i)*2
容易得到
φ ( i 3 ) = φ ( i ) 3 \varphi(i*3)=\varphi(i)*3
\cdots\cdots
φ ( i p ) = φ ( i ) p \varphi(i*p)=\varphi(i)*p

欧拉函数线性筛

根据欧拉函数的性质,我们可以在筛素数的同时将欧拉函数一起线性筛出来
source:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int p[100000],vis[10000000],phi[1000000];
int main(){
    int num=0,n;
    scanf("%d",&n);
    vis[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(!vis[i])//若i是素数,它就和所有小于i的正整数互质(性质一)
        {
            p[++num]=i;
            phi[i]=i-1;
        }
        int k;
        for(int j=1;j<=num&&i*p[j]<=n;j++)
        {
            k=i*p[j];
            vis[k]=1;
            if(i%p[j]==0)//(性质五)
            {
                phi[k]=phi[i]*p[j];
                break;
            }
            phi[k]=phi[i]*(p[j]-1);//(性质二)
        }

    }
    for(int i=1;i<=n;i++)
    {
        printf("%d ",phi[i]);
    }
    printf("\n");
    return 0;
}

最后,万分感谢boshi的倾力相助!!!

猜你喜欢

转载自blog.csdn.net/jiangbojun2017/article/details/82947534