扩展欧拉定理

自作多情 提交于 2020-01-22 21:18:03

欧拉定理

\(gcd(a,m)=1\),则\(a^{φ(m)}≡1\ (mod\ m)\)

扩展欧拉定理

\(b\geqslant φ(m)\),则\(a^b≡a^{b\ mod\ φ(m)+φ(m)}\ (mod\ m)\)

利用扩展欧拉定理,可以处理快速幂取模,例如【模板】欧拉定理上帝与集合的正确用法

\(a^b \bmod m\)

\(code:\)

ll qp(ll x,ll y)
{
    ll ans=1;
    while(y)
    {
        if(y&1) ans=(ans*x)%m;
        x=(x*x)%m;
        y>>=1;
    }
    return ans%m;
}
ll get_phi(ll x)
{
    ll ans=x;
    for(int i=2;i<=sqrt(x);++i)
    {
        if(x%i) continue;
        ans=ans*(i-1)/i;
        while(x%i==0) x/=i;
    }
    if(x>1) ans=ans*(x-1)/x;
    return ans;
}

......

for(int i=1;i<=len;++i) 
{
    b=((b<<1)+(b<<3)+(str[i]^48));
    if(b>=phi) b%=phi,flag=true;
}
if(flag) b+=phi;
printf("%lld",qp(a,b));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!