题意:求\(2^{2^{2^{2^{...}}}}\%p\)
题解:可以发现用扩展欧拉定理不需要很多次就能使模数变成1,后面的就不用算了
\(a^b\%c=a^{b\%\phi c} gcd(b,c)==1\)
\(a^b\%c=a^{b\%\phi c+\phi c} gcd(b,c)!=1\)

//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 998244353
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
//#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
template<typename T>
inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>
inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}using namespace std;const double eps=1e-8;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=10000000+10,maxn=400000+10,inf=0x3f3f3f3f;int prime[N],cnt,phi[N];
bool mark[N];
void init()
{phi[1]=1;for(int i=2;i<N;i++){if(!mark[i]){prime[++cnt]=i;phi[i]=i-1;}for(int j=1;j<=cnt&&i*prime[j]<N;j++){mark[i*prime[j]]=1;phi[i*prime[j]]=phi[i]*phi[prime[j]];if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}}}
}
int main()
{init();int T;scanf("%d",&T);while(T--){vi v;ll p;scanf("%lld",&p);ll pp=p;while(p!=1){v.pb(p);// printf("%lld\n",p);p=phi[p];}ll now=1;for(int i=(int)v.size()-1;i>=0;i--){now=qp(2,now,v[i])+(i?v[i]:0);}printf("%lld\n",now%pp);}return 0;
}
/****************************************/

转载于:https://www.cnblogs.com/acjiumeng/p/9541464.html

bzoj3884: 上帝与集合的正确用法 扩展欧拉定理相关推荐

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

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

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

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

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

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

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

    题目 对于100%的数据,T<=1000,p<=10^7 题解 来捉这道神题 欧拉定理的一般形式: \[a^{m} \equiv a^{m \mod \varphi(p) + [m \ge ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 和12岁小同志搞创客开发:设计一款亮度可调节灯
  2. LIst与ArrayList区别
  3. 新手入门机器学习十大算法
  4. SQL中Group By的使用,以及一些特殊使用方法
  5. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
  6. 装配组件_基于Haption力反馈系统的交互式装配仿真
  7. C# 文件读取方法,自己写的例子,保存一下,备用
  8. 断开式 DataGridView控件 winform
  9. BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
  10. wxml代码支持js代码吗_如何取胜:代码支持者的建议
  11. Java Web学习总结(19)——web.xml配置详解
  12. python模块的使用方法_python中requests模块的使用方法
  13. Oracle触发器5-Instead of触发器
  14. Aggregated Residual Transformations for DeepNeural Networks -ResNetXt2017【论文理解】
  15. MATLAB学习之均值滤波
  16. DAMA数据管理知识体系指南-读书笔记9
  17. 分享几个在线作图工具
  18. threejs光源的使用
  19. linux系统使用宝塔来搭建内部gitlab教程
  20. 全球诺贝尔奖得主最多的30所大学排名

热门文章

  1. 【用jersey构建REST服务】系列文章
  2. 忘记mysql密码 重置密码
  3. unity camera aspect
  4. demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis
  5. EIGRP路由协议实现网络互联
  6. c语言编写keil 设置memory model的编辑器,keil C51的Memory Model 说明[三种Model的选择对编译的影响]】...
  7. async和await的错误捕获
  8. vue脚手架的自定义配置
  9. 研华自动驾驶计算机,研华全新发布宽温8TB NVMe SSD SQFlash 920系列 为自动驾驶应用保驾护航...
  10. linux命令行添加管理员用户,Linux基础命令---添加用户useradd