题目描述

\[2^{2^{2\cdots}} ~mod ~p
\]

简单题,指数循环节。

由于当\(b>=\psi(p)\)时,有

\[a^b=a^{b ~mod~\psi(p)+\psi(p)} \pmod p
\]

显然这道题满足这个条件。

那当然是算\(\psi(p)\)然后\(2^{2^{2\cdots}}\)就可以变成

\[2^{2^{2^{2\cdots}}}=2^{(2^{2^{2\cdots}} ~mod~\psi(p)+\psi(p))} \pmod p
\]

啦。

往指数里头进行递归,每次算一个\(\psi(p')\)即可(显然有解)。

边界\(p=1\)时,显然式子\(=0\)。

参考代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<string>
  7. #include<cstdlib>
  8. #include<queue>
  9. #include<vector>
  10. #define INF 0x3f3f3f3f
  11. #define PI acos(-1.0)
  12. #define N 101
  13. #define MOD 2520
  14. #define E 1e-12
  15. #define ll long long
  16. using namespace std;
  17. inline ll read()
  18. {
  19. int f=1,x=0;char c=getchar();
  20. while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
  21. while(c>='0'&&c<='9'){x=x*10+c-'0';;c=getchar();}
  22. return x*f;
  23. }
  24. inline int phi(int n)
  25. {
  26. int ans=n;
  27. for(int i=2;i<=sqrt(n);++i){
  28. if(n%i==0){
  29. ans=ans/i*(i-1);
  30. while(n%i==0) n/=i;
  31. }
  32. }
  33. if(n>1) ans=ans/n*(n-1);
  34. return ans;
  35. }
  36. int p;
  37. inline ll qp(ll a,ll b,ll p)
  38. {
  39. ll ans=1;
  40. for(;b;b>>=1){if(b&1)ans=(ans*a)%p;a=(a*a)%p;}
  41. return ans%p;
  42. }
  43. inline int dfs(ll x)
  44. {
  45. if(x==1) return 0;
  46. return qp(2,dfs(phi(x))+phi(x),x);
  47. }
  48. int main()
  49. {
  50. int t;
  51. t=read();
  52. while(t--){
  53. p=read();
  54. printf("%lld\n",dfs(p)%p);
  55. }
  56. return 0;
  57. }

P4139 上帝与集合的正确用法[欧拉定理]的更多相关文章

  1. 洛谷 P4139 上帝与集合的正确用法 解题报告

    P4139 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新 ...

  2. 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]

    题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...

  3. 【BZOJ3884】上帝与集合的正确用法 [欧拉定理]

    上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Input 第一行一个T ...

  4. 题解-洛谷P4139 上帝与集合的正确用法

    上帝与集合的正确用法 \(T\) 组数据,每次给定 \(p\),求 \[\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod p ...

  5. Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925

    题目传送门 题目中的式子很符合扩展欧拉定理的样子.(如果你还不知扩展欧拉定理,戳).对于那一堆糟心的2,我们只需要递归即可,递归边界是模数为1. 另外,本题中好像必须要用快速乘的样子...否则无法通过 ...

  6. luogu P4139 上帝与集合的正确用法(扩展欧拉定理)

    本蒟蒻现在才知带扩展欧拉定理. 对于任意的\(b\geq\varphi(p)\)有 \(a^b\equiv a^{b\ mod\ \varphi(p)+\varphi(p)}(mod\ p)\) 当\ ...

  7. 洛谷 P4139 上帝与集合的正确用法

    题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...

  8. 【洛谷】P4139 上帝与集合的正确用法

    题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的:  第一天,上帝创造了一个世界的基本元素,称做“元”.  第二天,上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...

  9. P4139 上帝与集合的正确用法

    本题是欧拉定理的应用.我这种蒟蒻当然不知道怎么证明啦! 那么我们就不证明了,来直接看结论: ab≡⎧⎩⎨⎪⎪ab%φ(p)abab%φ(p)+φ(p)gcd(a,p)=1gcd(a,p)≠1,b< ...

随机推荐

  1. FinalShell—一体化服务器管理软件(SSH客户端)

    下面附上一些截图和官方连接: 官网:http://www.hostbuf.com/ FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发 ...

  2. Linux基础(02)MakeFile的创建和使用

    makefile是生成文件的脚本 , 把当前文件下的.c文件生成.o文件和可执行程序 SRC = $(wildcard *.c) OBJS = $(patsubst %.c,%.o,$(SRC)) C ...

  3. C/C++、Qt4实现FTP客户端(有无界面版)

    操作系统:Ubuntu 12.04 LTS 开发工具:GNU4.6.3,C/C++标准库,Qt4,Qt Creator Documentation 2.4.1 码云:传送门,GitHub:传送门 相关 ...

  4. vs2017- C语言- winsocket- 链接错误 LNK2019

    错误介绍 操作系统:windows10 IDE:vs2017 语言:C语言 项目内容简介:编写一个双人网络海战棋对战游戏 错误类型:链接错误 LNK2019 解决方案:程序需要用到ws2_32.lib ...

  5. golang --Converting and Checking Types

    package main import ( "fmt" "strconv" ) func main() { strVar := "100" ...

  6. MongoDB的安装,mongod和mongo的区别

    一. mongoDB安装路径 安装路径(最新4.0.11):https://www.mongodb.com/download-center/community?jmp=nav 建议另外找路径下载,外网 ...

  7. 分布式缓存重建并发冲突和zookeeper分布式锁解决方案

    如果缓存服务在本地的ehcache中都读取不到数据. 这个时候就意味着,需要重新到源头的服务中去拉去数据,拉取到数据之后,赶紧先给nginx的请求返回,同时将数据写入ehcache和redis中 分布 ...

  8. 阿里巴巴 Java 开发手册(二): 常量定义

    1. [强制]不允许任何魔法值(即未经定义的常量)直接出现在代码中. 反例: String key = "Id#taobao_" + tradeId; cache.put(key, ...

  9. Tornado + Bootstrap 快速搭建自己的web应用

    前言 最近用 python tordado 框架, 整了一个模板页面, 用于接入与发布数据的展示, tornado 简单易用, bootstrap 比较流行, 用起来也省事, 配合起来做些小案例非常迅 ...

  10. Linux系统怎么分区

    linux分区方法,不同的人有不同的方法,反正没有统一的方法.在分区方面,我觉得根据自己的实际情况来分是最好的.玩linux也有好几年了,下面说一下,我在分区方面的一些经验. 一,个人用 如果是个人用 ...