[欧拉降幂][2019南京网络赛B]super_log

题意:输入a,b,p,求(底数a的右上角有b-1个a)

思路:

广义欧拉定理:

AC代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;

ll a,b,m;
ll vis[1000005];
ll prime[1000005],num=0;
ll phi[1000005];

void getphi(ll n=1000000){
    phi[1]=1;
    for(ll i=2;i<=n;i++){
        if(!vis[i]) prime[++num]=i,phi[i]=i-1;
        for(ll j=1;j<=num;j++){
            ll k=i*prime[j];
            if(k>n)break;
            vis[k]=1;
            if(i%prime[j]==0){
                phi[k]=phi[i]*prime[j];
                break;
            }
            phi[k]=phi[i]*(prime[j]-1);
        }
    }
    return;
}

ll qpow(ll a,ll b,ll mod){
  ll ret=1;
  while(b){
    if(b&1) ret=ret*a%mod;
    a=a*a%mod;
    b>>=1;
  }
  return ret;
}

ll check(ll d,ll cmp){
  ll res=a;
  for(ll i=1;i<=d;i++){
    ll tmp=1;
    for(ll j=1;j<=res;j++){
        tmp=tmp*a;
        if(tmp>=cmp) return 1;
    }
    res=tmp;
  }
  return -1;
}

ll fun(ll d){
  ll res=a;
  for(ll i=1;i<=d;i++){
    ll tmp=1;
    for(ll j=1;j<=res;j++) tmp=tmp*a;
    res=tmp;
  }
  return res;
}

ll cal(ll d,ll p){
  if(p==1) return 0;

  if(d==0) return a%p;

  ll tmp;
  if(__gcd(a,p)==1) tmp=cal(d-1,phi[p]);//gcd(a,p)==1
  else{
      if(check(d-1,phi[p])<0) tmp=fun(d-1);//gcd(a,p)!=1&&b<phi(p)
      else tmp=cal(d-1,phi[p])+phi[p];//gcd(a,p)!=1&&b>=phi(p)
  }
  ll ret=qpow(a,tmp,p);
  return ret;
}

int main()
{
    getphi();
    ll t;scanf("%lld",&t);
    while(t--){
        scanf("%lld%lld%lld",&a,&b,&m);
        if(a==1||b==0){
            printf("%lld\n",1%m);
            continue;
        }
        ll ans=cal(b-1,m);
        printf("%lld\n",ans%m);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/lllxq/p/11444011.html

时间: 2024-07-30 16:57:12

[欧拉降幂][2019南京网络赛B]super_log的相关文章

super_log (广义欧拉降幂)(2019南京网络赛)

题目: In Complexity theory, some functions are nearly O(1)O(1), but it is greater then O(1)O(1). For example, the complexity of a typical disjoint set is O(nα(n))O(nα(n)). Here α(n)α(n) is Inverse Ackermann Function, which growth speed is very slow. So

2019ICPC南京网络赛B super_log——扩展欧拉定理

题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if } x \geq 1 \end{cases}$$ 求最小的正整数 $x$,使得 $log_a*(x) \geq b$ 分析 通过将递归式展开,展开 $b$ 次等于1,所以 $x$ 为 $a^{a^{a^{...}}}$(共 $b$ 次) 由欧拉降幂公式 $$a^b= \begin{cases} a^{b \

The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解

(施工中……) 比赛传送门:https://www.jisuanke.com/contest/3004 D. Robots(期望dp) 题意 给一个DAG,保证入度为$0$的点只有$1$,出度为$0$的点只有$n$. 现在一个机器人从$1$出发,每天都会以相同的概率前往相邻节点之一或静止不动. 每天机器人消耗的耐久等于经过的天数. 求机器人到点$n$期望消耗的耐久. 划水划的很愉快,唯一一道做出来的题.但是和题解做法不同(感觉我的方法麻烦),因此砸了3h在这题上面(正在试图读懂题解ing). 设

2019ICPC网赛南京站B题 super_log(欧拉降幂

https://nanti.jisuanke.com/t/41299 题意:让算a^(a^(a^(...))),一共b个a, (mod p)的结果. 思路:这是个幂塔函数,用欧拉降幂公式递归求解. #include<bits/stdc++.h> #define ll long long using namespace std; map<int,int> euler; ll a,b,mod; int phi(int n) { int now=n; int ret=n; if(eule

The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest C. Xyjj’s sequence(动态规划+欧拉降幂)

题目链接:https://nanti.jisuanke.com/t/40255 中文题面: 解题思路:先用欧拉降幂求出A,B两个序列,定义dp[0][i][j]为取A的前i个元素,B的前j个元素,且C的最后一个元素为B[j],同理dp[1][i][j]为取A的前i个元素,B的前j个元素,且C的最后一个元素为A[i],那么就很容易得到状态转移方程.那么最后答案即为max(dp[0][n][n],dp[1][n][n]).还有值得注意的是:该题需要使用滚动数组,不然会超内存. 在此贴两个关于欧拉降幂

ACM-数论-广义欧拉降幂

https://www.cnblogs.com/31415926535x/p/11448002.html 曾今一时的懒,造就今日的泪 记得半年前去武大参加的省赛,当时的A题就是一个广义欧拉降幂的板子题,后来回来补了一下,因为没有交的地方,于是就测了数据就把代码扔了,,,然后,,昨天的南京网络赛就炸了,,,一样的广义欧拉降幂的板子题,,然后因为忘记了当初自己想出来的那中写法,,一直想着回想起之前的写法,,然后到结束都没弄出来,,,emmmm,, 赛后看了一下别人的解法,,别人的处理方法很巧妙,,当

2018ICPC南京网络赛

2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \times (n-1)! \% n= (n-2)!(n^2-2n+1) \%n =(n-2)!\] \[(n-2+1)\times (n-2)! \% n= (n-3)!(n^2-3n+2) \%n =(n-3)! \times 2\] 以此类推,最终只剩下\(n-1\) 时间复杂度:\(O(1)\

bzoj3884: 上帝与集合的正确用法 欧拉降幂公式

欧拉降幂公式:http://blog.csdn.net/acdreamers/article/details/8236942 糖教题解处:http://blog.csdn.net/skywalkert/article/details/43955611 注:知道欧拉公式是远远不够的,还要知道欧拉降幂公式,因为当指数很大的时候需要用 然后欧拉降幂公式不要求A,C互质,但是B必须大于等于C的欧拉函数 吐槽:感觉记忆化搜索影响不大啊,当然肯定是因为太水了 这样复杂度是O(T*sqrt(p)*logp)

HDU4704(SummerTrainingDay04-A 欧拉降幂公式)

Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3245    Accepted Submission(s): 1332 Problem Description Sample Input 2 Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input fil