欧拉函数φ(x)相关性质及计算

本文介绍了欧拉函数φ(x)的定义、性质和计算方法。欧拉函数是计算与n互质的正整数数量的数学工具,性质包括φ(p)=p-1(p为质数)以及φ(x)的积性。计算欧拉函数可以通过求解质因数来实现。此外,提供了两种计算策略:直接求解单个数的欧拉函数(O(n))和1到n的欧拉函数(O(nloglogn))。

定义:

  • 正整数nnn,欧拉函数是 小于nnn的正整数nnn互质的数的数目。(φ(1)=1\varphi(1)=1φ(1)=1

互质:aaabbb互质,即gcd⁡(a,b)=1\gcd(a,b)=1gcd(a,b)=1



性质:

  1. 对于质数pppφ(p)=p−1\varphi(p)=p-1φ(p)=p1

  2. 欧拉函数φ(x)\varphi(x)φ(x)为(不完全)积性函数,若 mmmnnn互质,则φ(mn)=φ(m)φ(n)\varphi(mn)=\varphi(m)\varphi(n)φ(mn)=φ(m)φ(n)
    特别地,当m=2m=2m=2nnn奇数时,有φ(2n)=φ(n)\varphi(2n)=\varphi(n)φ(2n)=φ(n)

  3. n>2n\gt2n>2时,φ(n)\varphi(n)φ(n)是偶数;当n>6n\gt6n>6时,φ(n)\varphi(n)φ(n)是合数( 因为φ(n)=2\varphi(n)=2φ(n)=2是偶数,但不是合数 )

  4. 小于等于nnn的数中,nnn互质的数的总和为:φ(n)∗n/2          (n>1)\varphi(n)*n/2\;\;\;\;\;(n\gt1)φ(n)n/2(n>1)



计算:

  • 欧拉函数通式:φ(x)=x∏i=1n(1−1pi)\varphi(x)=x \prod_{i=1}^{n}(1-\frac{1}{p_i})φ(x)=xi=1n(1pi1)

其中p1,p2,... ,pnp_1,p_2,...\,,p_np1,p2,...,pnxxx的所有质因数xxx是为正整数。(φ(1)=1\varphi(1)=1φ(1)=1


为方便编程计算,对上述通式进行通分,得到:
φ(x)=x∏i=1n(pi−1pi)\varphi(x)=x \prod_{i=1}^{n}(\frac{p_i-1}{p_i})φ(x)=xi=1n(pipi1)
那么只需要求得x的质因数,即可求得欧拉函数。



模板:

①求一个数nnn的欧拉函数       O(n)\;\;\;O(\sqrt n)O(n)

即遍历111~n\sqrt nn找出nnn的质因数进行计算即可。

int phi(int n)   //计算φ(n)
{
	if(n==1)     //特判
		return 1;
    int res=n,k=sqrt(n);
    for(int i=2;i<=k;i++)
    {
        if(n%i==0)
        {
            res=res/i*(i-1);  //先除后乘避免溢出
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1)   //不要漏了这句
        res=res/n*(n-1);
    return res;
}

② 求111~ nnn的欧拉函数 &ThickSpace;&ThickSpace;&ThickSpace;O(nlog⁡log⁡n)\;\;\;O(n\log{\log n})O(nloglogn)

埃氏素筛 的的方法进行处理即可(当然也可以用欧拉筛,不过写起来稍微麻烦些,但是时间复杂度能达到O(n)O(n)O(n)

就是每次找到一个质数,对 质因数包含该质数的数 的欧拉函数进行一次计算,同时筛去合数。

int get_phi()   //得到欧拉函数表
{
    phi[1]=1;   //特判
    for(int i=2;i<=maxn;i++)  //先令φ(x)=x
        phi[i]=i;
    for(int i=2;i<=maxn;i++)
    {
        if(phi[i]!=i)   //说明不是质数
            continue;
        for(int j=i;j<=maxn;j+=i)   //遍历质因数包含i的数
            phi[j]=phi[j]/i*(i-1);  //先除后乘避免溢出
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值