欧拉函数 欧拉定理 扩展欧拉定理

数论 欧拉函数 欧拉定理 扩展欧拉定理

最近紧急恶补数论..

公式性质总结:
三个欧拉函数线性筛公式:

[varphi(p)=p-1
]

[varphi(ptimes i)=phi(p)times phi(i) quad imod p not = 0
]

[varphi(ptimes i)=ptimes phi(i) quad imod p=0
]

通项公式:

[varphi(n)=ntimes Pi_{i=1}^{n}(1-frac{1}{p_i}) quad (p_i为n的质因数)
]

欧拉定理:

[a^{varphi(p)}equiv 1 quad gcd(a,p)=1
]

[]

扩展欧拉定理:
eSSrGT.png

欧拉函数

在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目。规定:(varphi(1)=1)

求解欧拉函数:

方法一

欧拉函数的通项公式:

[varphi (n)=ntimes Pi_{i=1}^{n}(1-frac{1}{p_i}) (p_i为n的质因数)
]

欧拉函数通项公式的证明,从别人的博客偷过来的:

ZxMdUO.png

代码:

ll oula(ll k){
    ll ans=k;
    for(ll i=2;i*i<=k;++i){
        if(k%i==0) ans-=ans/i;
        while(k%i==0) k/=i;
    }
    if(k>1) ans-=ans/k;
    return ans;
}

方法二

线性求欧拉函数

预备性质:

以下的p为质数

[varphi(p)=p-1
]

性质一:这个好解释,因为p为质数,所以1~p-1的每一个数都和p互质

[varphi(ptimes i)=varphi(p)times varphi(i) quad gcd(p,i)=1
]

性质二:根据欧拉函数的积性?。。

[varphi(ptimes i)=ptimes varphi(i) quad gcd(p,i)=1
]

性质三:。。<( ̄ c ̄)y▂ξ

然后将这三条性质代入欧拉筛即可

for(int i=2;i<=10000000;++i){
    if(!vis[i]){
        phi[i]=i-1; //性质一
        prime[++prime[0]]=i;
    }   
    for(int j=1;j<=prime[0]&&prime[j]*i<=10000000;++j){
    vis[prime[j]*i]=true;
    if(i%prime[j]!=0)
    phi[prime[j]*i]=phi[prime[j]]*phi[i]; //性质二
    else{
        phi[prime[j]*i]=prime[j]*phi[i]; //性质三
        break;
        }
    }
}

至此,是欧拉函数的两种求法。两种方法各有优势,无法相互取代

欧拉定理

欧拉定理:

[a^{varphi(p)}equiv 1 (mod p) quad gcd(a,p)=1
]

不会证明,但人家好背嘛ˋ( ° ▽、° )

回顾一下费马小定理:

[a^{p-1}equiv 1quad gcd(a,p)=1
]

同时,众所周知的是:

[varphi(p)=p-1
]

┌(。Д。)┐现在从欧拉定理看费马小定理,有没有看儿子的感觉

扩展欧拉定理

扩展欧拉定理:
eSSrGT.png

证明什么的自然是不会的..(/▽\)

例题

上帝与集合的正确用法

P4139 上帝与集合的正确用法

一句话题干:
tksbaoj.png

乍一眼看上去好似误解,事实上我就是佩服出题人脑洞套用扩展欧拉定理之后,发现是可解的

设f(n)为模数为n时的答案,(zeta)为那一坨无限平方

[f(n)=zeta mod n
]

[quad =2^zeta mod n
]

[quad =2^{zeta mod varphi(n) + varphi(n)} mod n
]

[quad =2^{f(varphi(n))+varphi(n)} mod n
]

递归的边界易知:

[f(1)=0
]

解决( ̄︶ ̄)↗ 

Please, another Queries on Array?

CF1114F Please, another Queries on Array?

简述题干:

维护一个数列支持以下操作

  1. 为区间[l,r]乘上一个正整数

  2. 求区间乘积的欧拉函数

codeforce的出题人脑洞大出天际

单看操作一,只需要简单的线段树就可以实现

再看操作二..这,wtf?!

利用一下欧拉函数的通项公式:

[varphi (n)=ntimes Pi_{i=1}^{n}(1-frac{1}{p_i}) (p_i为n的质因数)
]

由于题干的限制,不论是初始数组,还是后来乘上来的数字,其大小不会大于300,也就是说其质因数不会大于300。不大于300的质因数只有62个!

根据公式,我们需要知道:区间乘积和区间质因数情况,对于区间乘积,用long long存储,过程中不断用模数取余即可;对于区间质因数个数,用一个long long状压一下62个质因数的出现情况,由于只增不减的条件,数据变得很好处理。

ok,这就是亏我理解了,还是调了两个小时的题。。

原文链接: https://www.cnblogs.com/ticmis/p/13210772.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    欧拉函数 欧拉定理 扩展欧拉定理

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/360486

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午1:17
下一篇 2023年3月2日 下午1:18

相关推荐