zoukankan      html  css  js  c++  java
  • 19南京网络赛B 欧拉降幂

    题目链接
    给a,b,p。有b个a的幂

    #include <iostream>
    using namespace std;
    typedef long long LL;
    const LL N = 1e6+50;
    LL phi[N], vis[N], prime[N], cnt;
    void Euler()
    {
        for(LL i = 2;i < N;++i)
        {
            if(!vis[i])
            {
                prime[cnt++] = i;
                phi[i] = i-1;
            }
            for(int j = 0;j < cnt && i*prime[j] < N;++j)
            {
                vis[i*prime[j]] = 1;
                if(i%prime[j] == 0)
                {
                    phi[i*prime[j]] = phi[i]*prime[j];
                    break;
                }
                phi[i*prime[j]] = phi[i]*(prime[j]-1);
            }
        }
        phi[1] = 1;
    }
    LL q_pow(LL a, LL b, LL p)
    {
        LL ret = 1;
        while(b)
        {
            if(b&1) ret = ret*a>p?ret*a%p+p:ret*a;
            b >>= 1;
            a = a*a>p?a*a%p+p:a*a;
        }
        return ret;
    }
    LL solve(LL a, LL b, LL m)
    {
        if(m == 1 || b == 0) return 1;//phi(m) < m,所以最后m为1
        return q_pow(a, solve(a, b-1, phi[m]), m);
    }
    int main()
    {
        Euler();
        int T;scanf("%d",&T);
        while(T--)
        {
            LL a, b, m;
            scanf("%lld%lld%lld", &a, &b, &m);
            printf("%lld
    ", solve(a, b, m)%m);
        }
        return 0;
    }
    
  • 相关阅读:
    python面向对象编程(1)——基本概念,术语,self,构造器
    django-中间件
    集合
    深入字典
    django使用小贴士
    自动化发送微信
    django-模板继承
    SMTP发送邮件
    git的使用
    django-csrf攻击
  • 原文地址:https://www.cnblogs.com/chen99/p/11580639.html
Copyright © 2011-2022 走看看