zoukankan      html  css  js  c++  java
  • 浅谈 欧拉降幂

    在数论中,欧拉定理,(也称费马-欧拉定理)是一个关于同余的性质。欧拉定理表明,若n,a为正整数,且n,a互质,则:

      于是就有公式:

    第一个要求a和p互质,第二个和第三个是广义欧拉降幂,不要求a和p互质,但要求b和的大小关系。

    问题:求2^(2^(2^(2^(2^...)))) mod p的值

    题解:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
     
    ll ph(ll x)
    {
        ll res=x,a=x;
        for(ll i=2;i*i<=x;i++)
        {
            if(a%i==0)
            {
                res=res/i*(i-1);
                while(a%i==0) a/=i;
            }
        }
        if(a>1) res=res/a*(a-1);
        return res;
    }
    ll quick_pow(ll a,ll b,ll mod)
    {
        ll ans=1;
        while(b)
        {
            if(b&1) ans=(ans*a)%mod;
            a=(a*a)%mod;
            b>>=1;
        }
        return ans;
    }
    ll f(ll p)
    {
        if(p==1) return 0;
        ll k=ph(p);
        return quick_pow(2,f(k)+k,p);
    }
     
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            ll p;scanf("%lld",&p);
            printf("%lld
    ",f(p));
        }
        return 0;
    }
    

      

    求A^B mod C

     代码:

    #include <bits/stdc++.h>
    #define ll __int64
    #define mod 10000000007
    using namespace std;
    char a[1000006];
    ll x,z;
    ll quickpow(ll x,ll y,ll z)
    {
        ll ans=1;
        while(y)
        {
            if(y&1)
                ans=ans*x%z;
            x=x*x%z;
            y>>=1;
        }
        return ans;
    }
    ll phi(ll n)
    {
        ll i,rea=n;
        for(i=2;i*i<=n;i++)
        {
            if(n%i==0)
            {
                rea=rea-rea/i;
                while(n%i==0)
                    n/=i;
             }
        }
        if(n>1)
            rea=rea-rea/n;
        return rea;
    }
    int main()
    {
        while(scanf("%lld %s %lld",&x,a,&z)!=EOF)
        {
            ll len=strlen(a);
            ll p=phi(z);
            ll ans=0;
            for(ll i=0;i<len;i++)
                ans=(ans*10+a[i]-'0')%p;
            ans+=p;
            printf("%lld
    ",quickpow(x,ans,z));
        }
        return 0;
    }
    

      

  • 相关阅读:
    Markdown基本语法
    Hexo 集成 Gitalk 评论系统
    hexo添加百度统计
    tf.nn.softmax
    tf.InteractiveSession()与tf.Session()
    归一化、标准化、正则化的区别
    感受野的概念
    CNN中的low-level feature 与high-level feature
    安装vncserver后导致Ubuntu循环登录进入不了桌面的问题原因及解决办法
    python3 + Tensorflow + Faster R-CNN训练自己的数据
  • 原文地址:https://www.cnblogs.com/jaszzz/p/12824619.html
Copyright © 2011-2022 走看看