题目

对于100%的数据,T<=1000,p<=10^7

题解

来捉这道神题

欧拉定理的一般形式:
\[a^{m} \equiv a^{m \mod \varphi(p) + [m \ge \varphi(p)]\varphi(p)} \pmod p\]

我们令
\[ans(p) = 2^{2^{2^{...}}} \mod p\]
那么有
\[ans(p) = 2^{ans(\varphi(p)) + \varphi(p)} \mod p\]

\(O(\log p)\)递归即可

#include<iostream>
#include<cstdio>
#include<cmath>
#include<bitset>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 10000005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
bitset<maxn> isn;
int p[maxn],phi[maxn],pi;
void init(){phi[1] = 1;for (int i = 2; i <= 10000000; i++){if (!isn[i]) p[++pi] = i,phi[i] = i - 1;for (int j = 1; j <= pi && i * p[j] <= 10000000; j++){isn[i * p[j]] = true;if (i % p[j] == 0){phi[i * p[j]] = phi[i] * p[j];break;}phi[i * p[j]] = phi[i] * (p[j] - 1);}}
}
int qpow(int a,int b,int p){int ans = 1;for (; b; b >>= 1,a = 1ll * a * a % p)if (b & 1) ans = 1ll * ans * a % p;return ans;
}
int Ans(int p){if (p == 1) return 0;return qpow(2,Ans(phi[p]) + phi[p],p);
}
int main(){init();int T = read(),p;while (T--){p = read();printf("%d\n",Ans(p));}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8964263.html

BZOJ3884 上帝与集合的正确用法 【欧拉定理】相关推荐

  1. BZOJ-3884 上帝与集合的正确用法 欧拉定理

    再次仰望高端玩家Po姐 3884: 上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 772 Solved: 361 [Submit] ...

  2. BZOJ3884 上帝与集合的正确用法 (欧拉定理)

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

  3. [题解]bzoj3884 上帝与集合的正确用法

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

  4. bzoj3884上帝与集合的正确用法

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

  5. bzoj3884 上帝与集合的正确用法

    题意:求2^2^2^2^2.......^2%p的值,T组询问. 欧拉降幂多用几次就好了. 顺便试了下fwrite输出优化 ,效果显著. #include<cstring> #includ ...

  6. BZOJ3884上帝与集合的正确用法-欧拉函数

    刚开始我想的是欧拉降幂,可是觉得复杂度还是挺高的就去找了一下题解. 思路大方向没有问题,仍然是使用欧拉函数降低指数然后递归处理.但是不是简单的使用欧拉降幂而是应该对模数p稍微处理一下.因为底数已经确定 ...

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

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

  8. 【bzoj3884】上帝与集合的正确用法 扩展欧拉定理

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

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

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

最新文章

  1. 怎么调节手机的刷新率_高刷新率屏幕为何开始流行起来?
  2. 一个略复杂的数据映射聚合例子及代码重构
  3. svn switch 导致个别文件switch失败
  4. 查询中国城市公交线路
  5. 调用视频流html代码,如何将/“流”视频文件发送到HTML5视频标签
  6. 两年Java工作经验应该会些什么技术
  7. flask-alchemy-pagination
  8. 可视化:动态气泡图,拿走不谢!
  9. 转型个股赚钱机会最大--封起“345”选股
  10. C++ 实现简易 log 日志系统
  11. ZJOI2007时态同步
  12. 如何使用ReiBoot修复iOS系统
  13. 四叶草Clover引导界面的快捷键大全
  14. extjs 6.x 的使用
  15. CV LRO mission (LROC introduction)
  16. Linux 配置网络桥接模式
  17. 中英对照:30句经典英语广告词欣赏
  18. clover删除多余引导_clover如何删除无用启动项_常见问题解析,clover
  19. Android 2 时代到来了,敢为天下先是我等求知若渴的程序员的优秀品质
  20. 局域网如何共享文件?计算机1通过ip访问计算机2,拿取共享文件。

热门文章

  1. Unix系统编程()信号处理器简介
  2. 自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新...
  3. Hadoop 在 windows 7 64位的配置(一)|非cygwin
  4. 使用SQLite数据库存储数据(2)-向表中插入记录
  5. java蓝桥杯算法训练完数
  6. gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成
  7. php 字母数字混合排序,JavaScript_基于JS实现数字+字母+中文的混合排序方法,在上篇文章给大家介绍了JavaScr - phpStudy...
  8. linux进程和线程理解
  9. 如何逃过taint droid的跟踪
  10. 《Android开发精要》读书笔记——Android的系统架构