一、题目

  super_log

二、分析

  公式很好推出来,就是$$a^{a^{a^{a^{...}}}}$$一共是$b$个$a$。

  对于上式,由于指数太大,需要降幂,这里需要用到扩展欧拉定理:

  用这个定理时,除了$\gcd (a,p) =1$的情况,其他情况主要是保证$a$的指数不为$0$,在写代码的时候也需要注意这点,当然也可以重新定义个快速幂,使其快速幂的结果保证不为$0$,也是可以的的。

三、AC代码

#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define Min(a,b) ((a)>(b)?(b):(a))
#define Max(a,b) ((a)>(b)?(a):(b))
#define P pair<int, int> const int MAXN = 1e6+5;
int Phi[MAXN], Prime[MAXN], nPrime; void Euler()
{
memset(Phi, 0, sizeof(Phi));
Phi[1] = 1;
nPrime = 0;
for(int i = 2; i < MAXN; i++)
{
if(!Phi[i]) //i为素数
{
Phi[i] = i - 1;
Prime[nPrime++] = i;
}
for(int j = 0; j < nPrime && (long long)i*Prime[j] < MAXN; j++)
{
if(i%Prime[j])
{ Phi[ i*Prime[j] ] = Phi[i]*(Prime[j]-1);
}
else
{
Phi[ i*Prime[j] ] = Phi[i]*Prime[j];
break;
}
}
}
return;
} ll gcd(ll a, ll b) {return b==0?a:gcd(b,a%b);} ll 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 qPow(ll a, ll b, ll mod)
{
ll ans = 1;
while(b) {
if(b&1) ans = (ans * a > mod ? ans * a % mod + mod : ans * a);
a = (a * a > mod ? a * a % mod + mod : a * a);
b>>=1;
}
return ans;
} ll solve(ll a, ll times, ll m)
{
if(m == 1) return 1;
if(times == 0) return 1;
ll res = Phi[m];
ll b = solve(a, times-1, res);
if(gcd(a, m) == 1)
return Pow(a, b%res, m);
else if(b && b < res)
return Pow(a, b, m);
else
return Pow(a, b%res + res, m);
} ll solve2(ll a, ll times, ll m)
{
if(times == 0) return 1;
if(m == 1) return 1;
return qPow(a, solve2(a, times-1, Phi[m]), m);
} int main()
{
freopen("input.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int T;
ll a, b, m;
scanf("%d", &T);
Euler();
while(T--) {
scanf("%lld%lld%lld", &a, &b, &m);
printf("%lld\n", solve2(a, b, m)%m);
// printf("%lld\n", solve(a, b, m)%m);
}
return 0;
}

2019 南京网络赛 B super_log 【递归欧拉降幂】的更多相关文章

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

    https://nanti.jisuanke.com/t/41299 题意:让算a^(a^(a^(...))),一共b个a, (mod p)的结果. 思路:这是个幂塔函数,用欧拉降幂公式递归求解. # ...

  2. 2018 焦作网络赛 G Give Candies ( 欧拉降幂 )

    题目链接 题意 : 给出 N 个糖果.老师按顺序给 1~N 编号的学生分配糖果.每个学生要么不分.要么最少分一个.且由于是按顺序发放.那么对于某个有分到糖果的编号为 i 的学生.则 1~(i-1) 这 ...

  3. 2019 南京网络赛A

    南京网络赛自闭现场 https://nanti.jisuanke.com/t/41298 二维偏序经典题型 二维前缀和!!! #include<bits/stdc++.h> using n ...

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

    题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if ...

  5. 2019ICPC南京网络赛B super_log

    题意:求a的a的a次方..一直求b次,也就是在纸上写个a,然后一直a次方a次方,对m取模,记为F(a,b,m)=pow(a,F(a,b-1,phi(m)) 解题思路:联系欧拉降幂,这个迭代的过程,我们 ...

  6. 牛客OI测试赛 F 子序列 组合数学 欧拉降幂公式模板

    链接:https://www.nowcoder.com/acm/contest/181/F来源:牛客网 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘 ...

  7. Robots 2019南京网络赛 (概率dp)

    Robots \[ Time Limit: 1000 ms \quad Memory Limit: 262144 kB \] 题意 有一个机器人要从 \(1\) 点走到 \(n\) 点,每走一步都需要 ...

  8. [2019南京网络赛D题]Robots

    题目链接 2019.9.2更新 第二天睡醒想了想发现好像搜一遍就可以过,赛时写的花里胡哨的还错了,太菜了QAQ #include<bits/stdc++.h> using namespac ...

  9. 2019ICPC南京网络赛B super_log(a的b塔次方)

    https://nanti.jisuanke.com/t/41299 分析:题目给出a,b,mod求满足条件的最小a,由题目的式子得,每次只要能递归下去,b就会+1,所以就可以认为b其实是次数,什么的 ...

随机推荐

  1. Gitlab忘记root用户密码解决办法

    一.Gitlab忘记root用户密码,重置用户密码和查看用户ID号方法  1.Gitlab查看用户id号的方法1)方法1:通过api接口查询接口查询地址:http://gitlab的url/api/v ...

  2. codeforces 5D

    D. Follow Traffic Rules time limit per test 1 second memory limit per test 64 megabytes input standa ...

  3. 记一次 lampiao渗透(Drupal+脏牛提权)

    vulnhub|渗透测试lampiao 题记 最近在打靶机,发现了一个挺有意思的靶机,这里想跟大家分享一下. 环境准备 vulnhub最近出的一台靶机 靶机(https://www.vulnhub.c ...

  4. Debian8.1 安装samba与windows共享文件,在系统重启后samba服务无法自动启动

    Debian8.1安装配置完成并成功与window共享文件后,系统重启后再次访问时出现如下问题 (图)的解决方法 手动重启samba sudo /etc/init.d/samba start 从win ...

  5. node --experimental-modules & node.js ES Modules

    node --experimental-modules & node.js ES Modules how to run esm modules in node.js cli $ node -v ...

  6. Flutter for Desktop

    Flutter for Desktop https://flutter.dev/desktop https://github.com/flutter/flutter/wiki/Desktop-shel ...

  7. HTTP cache in depth

    HTTP cache in depth HTTP 缓存 https://developers.google.com/web/fundamentals/performance/optimizing-co ...

  8. scroll tabs

    scroll tabs https://github.com/NervJS/taro-ui/blob/dev/src/components/tabs/index.tsx https://github. ...

  9. svg 矩阵转换

    svg 矩阵转换 https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix https://develope ...

  10. nasm astrcat_s函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...