传送门

•题意

求$2^{2^{2^{2^{2^{2^{...^{2}}}}}}}$ (无穷个2) 对p取模的值

•思路

设答案为f(p)

$2^{2^{2^{2^{2^{2^{...^{2}}}}}}}\%p$

$=2^{(2^{2^{2^{2^{2^{...^{2}}}}}}\%\varphi(p)+ \varphi(p))}\%p$

$=2^{(2^{2^{2^{2^{2^{...^{2}}}}}}\%\varphi(p)+ \varphi(p))}\%p$

$=2^{(2^{(2^{2^{2^{2^{...^{2}}}}}\%\varphi(\varphi(p)+\varphi(\varphi(p))))}\%\varphi(p)+ \varphi(p))}\%p$

...

得到递推式     $2^{f(\varphi(p))+\varphi(p)}(mod\ p)$

利用欧拉降幂

$a^{b}=\begin{cases}a^{b\%\varphi(p)}  \ \ \ \ \ \ \ \ \ \  gcd(a,p)=1 \\ a^{b} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \   gcd(a,p)\neq 1,b \leqslant \varphi(p)\\a^{b\%\varphi(p)+\varphi(p)}  \ \ gcd(a,p)\neq1,b\geqslant \varphi(p)  \\ \end{cases}$

由于2的幂数是无穷的,肯定$>p$,所以可以直接使用$a^{b\%\varphi(p)+\varphi(p)} $

•代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 ll qpow(ll a,ll b,ll mod)
 5 {
 6     ll res=1;
 7     while(b)
 8     {
 9         if(b&1)
10             res=res*a%mod;
11         a=a*a%mod;
12         b>>=1;
13     }
14     return res;
15 }
16
17 ll phi(ll x)
18 {
19     ll res=x;
20     for(int i=2;i*i<=x;i++)
21     {
22         if(x%i==0)
23         {
24             while(x%i==0)
25                 x/=i;
26             res=res-res/i;
27         }
28     }
29     if(x>1)
30         res=res-res/x;
31     return res;
32 }
33
34 ll solve(ll m)
35 {
36     if(m==1)
37         return 0;
38
39     ll p=phi(m);
40     return qpow(2,solve(p)+p,m);
41 }
42
43 int main()
44 {
45     int t;
46     cin>>t;
47     while(t--)
48     {
49         ll m;
50         cin>>m;
51         cout<<solve(m)<<endl;
52     }
53 }

View Code

转载于:https://www.cnblogs.com/MMMinoz/p/11448399.html

洛谷4139 bzoj 3884 上帝与集合的正确用法相关推荐

  1. bzoj 3884: 上帝与集合的正确用法(欧拉函数)

    3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2574  Solved: 1151 [Submit][Status] ...

  2. BZOJ - 3884 上帝与集合的正确用法

    Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...

  3. bzoj 3884 上帝与集合的正确用法 扩展欧拉定理

    Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...

  4. BZOJ 3884: 上帝与集合的正确用法 欧拉降幂

    根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α".&q ...

  5. (bzoj 3884 上帝与集合的正确用法)欧拉定理

    题目 Time Limit: 5 Sec Memory Limit: 128 MB Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元 ...

  6. BZOJ 3884 上帝与集合的正确用法 (欧拉定理)

    题目大意:求2^(2^(2^(2^(2^...)))) mod p的值 题解:https://blog.csdn.net/popoqqq/article/details/43951401 #inclu ...

  7. BZOJ 3884 上帝与集合的正确用法

    学习借鉴了skywalkert大佬的题解 Orz 首先题目需要用到欧拉函数的一个性质 $\forall x\geq \phi(p)$ $a^x\equiv a^{x \; mod \; \phi(p) ...

  8. 3884: 上帝与集合的正确用法 —— 欧拉降幂

    Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...

  9. 3884: 上帝与集合的正确用法 欧拉函数+降幂公式

    Orz题解 降幂公式:a^x ≡a^(x modϕ(p)+ϕ(p)) (mod p) #include<iostream> #include<cstdio> #include& ...

最新文章

  1. MPB:南土所褚海燕组-小麦相关微生物的野外采样与样品保存
  2. mysql基于传统的log_file及log_pos主从复制
  3. 数据结构源码笔记(C语言):二叉树遍历
  4. win7系统相关问题故障解决
  5. 如何在命令提示符下编译运行含有Package的java文件
  6. linux各种复制命令
  7. 《Pro/ENGINEER野火版5.0从入门到精通》——2.5 设置零件单位
  8. careercup-位操作5.1
  9. python—符号 | ^的使用
  10. vmware ubuntu 16.04 guest 修复不能桌面大小自动调整和从宿主机复制粘贴的问题
  11. 【C++】反向迭代器(rbegin,rend)(转载)
  12. VBA—EXCEL操作集合—05
  13. 反编译DLL并修改后再生成DLL
  14. 智能问答系统CQA调研--工业界
  15. 磁盘分区误删怎样恢复?
  16. CSS,文本溢出显示省略号
  17. 中国大学慕课《数据挖掘与python实践》期末测验版本3
  18. Smbus host controller not enabled Assuming drive cache : write through
  19. Grafana实现SQL查询参数查询
  20. upload-labs安装及攻略

热门文章

  1. word2003如何设置护眼模式_连锁企业如何设置「单店盈利模式」?
  2. views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...
  3. centos非root用户创建用户_CentOS中用户和用户组管理
  4. java获取本地外网ip地址
  5. 【SSL】java keytool工具操作java带的(JKS)证书库
  6. spring cloud集成Eureka
  7. 用Location对象和history对象修改页面url
  8. 在linux中的sort命令,linux中sort命令
  9. ckks方案优化最好的_果断收藏:SEO高级优化技能升级策略!
  10. 优先级调度算法实现_一篇讲透嵌入式操作系统任务调度