博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
64. [Mcoi2018]终末之诗(上)
阅读量:4557 次
发布时间:2019-06-08

本文共 1088 字,大约阅读时间需要 3 分钟。

Description

求出\(k^{k^{k^{k^{...}}}} \pmod p\) 的结果


扩展欧拉定理:\[a^x=a^{min(x,x\%\varphi(p)+\varphi(p))}(mod \ p)\]

题中由于是无限层,所以答案就是 \(x\)

由于\(\varphi(\varphi(\varphi(...)))\)总有一次会变成\(1\)的,那时候\(x\%p=0\)

那么就每次递归求解\(x\%\varphi(p)\)这一块就好了啊


#include
#include
#include
#include
#include
#define LL long long#define max(a,b) ((a)>(b)? (a):(b))#define min(a,b) ((a)<(b)? (a):(b))using namespace std;LL i,m,n,j,k,a[10001],p,t;LL eular(LL x){ LL now=x, r=sqrt(now); for(LL i=2;i<=r;i++) { if(x%i!=0) continue; now=now/i*(i-1); while(x%i==0) x/=i; } if(x!=1) now=now/x*(x-1); return now; }LL quick(LL x,LL m,LL M){ LL t=1; for(m;m>1;m>>=1, x=x*x%M) if(m&1) t=t*x%M; return x*t%M;}LL dfs(LL now){ if(now==1) return 0; LL phi=eular(now); return quick(n,dfs(phi)+phi,now);}int main(){ scanf("%lld",&t); for(t;t;t--) { scanf("%lld%lld",&n,&p); printf("%lld\n",dfs(p)); }}

转载于:https://www.cnblogs.com/ZUTTER/p/10229858.html

你可能感兴趣的文章
999线监控
查看>>
Redis在python中的使用
查看>>
理解class.forName()
查看>>
九大排序算法再总结
查看>>
Uva10290 - {Sum+=i++} to Reach N
查看>>
每日一小练——数值自乘递归解
查看>>
二叉搜索树 (BST) 的创建以及遍历
查看>>
MyBatis/Ibatis中#和$的区别
查看>>
【JAVASCRIPT】React学习-组件生命周期
查看>>
win 64 文件操作
查看>>
LeetCode : First Bad Version
查看>>
pythone函数基础(14)发送邮件
查看>>
Java的一些好看的
查看>>
Linux 修改文件夹和其中所有文件的权限
查看>>
详解volatile 关键字与内存可见性
查看>>
go 聊天室简单版总结
查看>>
HDU 4258 斜率优化dp
查看>>
Literature review
查看>>
Java 中可变参数
查看>>
PyTorch在64位Windows下的Conda包(转载)
查看>>