bzoj3884: 上帝与集合的正确用法 扩展欧拉定理
题意:求\(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: 上帝与集合的正确用法 扩展欧拉定理相关推荐
- 【bzoj3884】上帝与集合的正确用法 扩展欧拉定理
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α&quo ...
- bzoj 3884 上帝与集合的正确用法 扩展欧拉定理
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
- BZOJ3884 上帝与集合的正确用法 (欧拉定理)
根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α". ...
- BZOJ3884 上帝与集合的正确用法 【欧拉定理】
题目 对于100%的数据,T<=1000,p<=10^7 题解 来捉这道神题 欧拉定理的一般形式: \[a^{m} \equiv a^{m \mod \varphi(p) + [m \ge ...
- BZOJ-3884 上帝与集合的正确用法 欧拉定理
再次仰望高端玩家Po姐 3884: 上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 772 Solved: 361 [Submit] ...
- [题解]bzoj3884 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
- bzoj3884上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
- bzoj3884 上帝与集合的正确用法
题意:求2^2^2^2^2.......^2%p的值,T组询问. 欧拉降幂多用几次就好了. 顺便试了下fwrite输出优化 ,效果显著. #include<cstring> #includ ...
- BZOJ3884上帝与集合的正确用法-欧拉函数
刚开始我想的是欧拉降幂,可是觉得复杂度还是挺高的就去找了一下题解. 思路大方向没有问题,仍然是使用欧拉函数降低指数然后递归处理.但是不是简单的使用欧拉降幂而是应该对模数p稍微处理一下.因为底数已经确定 ...
- (bzoj 3884 上帝与集合的正确用法)欧拉定理
题目 Time Limit: 5 Sec Memory Limit: 128 MB Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元 ...
最新文章
- 和12岁小同志搞创客开发:设计一款亮度可调节灯
- LIst与ArrayList区别
- 新手入门机器学习十大算法
- SQL中Group By的使用,以及一些特殊使用方法
- ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
- 装配组件_基于Haption力反馈系统的交互式装配仿真
- C# 文件读取方法,自己写的例子,保存一下,备用
- 断开式 DataGridView控件 winform
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
- wxml代码支持js代码吗_如何取胜:代码支持者的建议
- Java Web学习总结(19)——web.xml配置详解
- python模块的使用方法_python中requests模块的使用方法
- Oracle触发器5-Instead of触发器
- Aggregated Residual Transformations for DeepNeural Networks -ResNetXt2017【论文理解】
- MATLAB学习之均值滤波
- DAMA数据管理知识体系指南-读书笔记9
- 分享几个在线作图工具
- threejs光源的使用
- linux系统使用宝塔来搭建内部gitlab教程
- 全球诺贝尔奖得主最多的30所大学排名
热门文章
- 【用jersey构建REST服务】系列文章
- 忘记mysql密码 重置密码
- unity camera aspect
- demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis
- EIGRP路由协议实现网络互联
- c语言编写keil 设置memory model的编辑器,keil C51的Memory Model 说明[三种Model的选择对编译的影响]】...
- async和await的错误捕获
- vue脚手架的自定义配置
- 研华自动驾驶计算机,研华全新发布宽温8TB NVMe SSD SQFlash 920系列 为自动驾驶应用保驾护航...
- linux命令行添加管理员用户,Linux基础命令---添加用户useradd