BZOJ3884上帝与集合的正确用法-欧拉函数
刚开始我想的是欧拉降幂,可是觉得复杂度还是挺高的就去找了一下题解。
思路大方向没有问题,仍然是使用欧拉函数降低指数然后递归处理。但是不是简单的使用欧拉降幂而是应该对模数p稍微处理一下。因为底数已经确定为2,所以我们可以将p写成p=2k*q,q为奇数的形式,则
22的无穷次方%p=2k(22的无穷次方-k%q)
这样可以直接对新的指数直接模q的欧拉函数值进行处理,因为每次q为奇数,q的欧拉函数值一定为偶数(他的因子一定是奇素数,奇素数的欧拉函数值一定是偶数),所以每次至少将p变为原来的一半,所以复杂度比较低。因为用到的欧拉函数值不是很多,所以直接求单点的欧拉函数值即可。
需要注意的是指数-k模欧拉函数值时应该保证指数大于0
AC代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<map>
#include<queue>
#include<set>
#include<vector>using namespace std;typedef long long ll;
const int MAXN=1e5+5;ll p;ll quick_pow(ll a,ll b,ll p)
{a%=p; ll ret=1;while(b){if(b&1) ret=ret*a%p;a=a*a%p; b>>=1;}return ret;
}ll quick_pow(ll a,ll b)
{ll ret=1;while(b){if(b&1) ret*=a;a*=a; b>>=1;}return ret;
}ll phi(int x)
{ll ret=x;for(int i=2;i*i<=x;i++){if(x%i==0){ret=ret-ret/i;while(x%i==0) x/=i;}if(x==1) break;}if(x>1) ret=ret-ret/x;return ret;
}ll deal(ll p)
{ll k=0;while(~p&1) k++,p>>=1;if(p==1) return 0;ll phip=phi(p);return quick_pow(2,(deal(phip)-k%phip+phip)%phip,p)<<k;
}int main()
{int T;scanf("%d",&T);while(T--){scanf("%lld",&p);printf("%lld\n",deal(p));}return 0;
}
BZOJ3884上帝与集合的正确用法-欧拉函数相关推荐
- Summer Training day4上帝与集合的正确用法 欧拉函数+降幂公式
这个题的指数太大了,因此要考虑用降幂公式进行降幂 记f(p) = 2^2^2... % p f(p) = 2^(2^2^2...%phi(p) + phi(p)) % p = 2^(f(phi(p)) ...
- 3884: 上帝与集合的正确用法 欧拉函数+降幂公式
Orz题解 降幂公式:a^x ≡a^(x modϕ(p)+ϕ(p)) (mod p) #include<iostream> #include<cstdio> #include& ...
- BZOJ 3884: 上帝与集合的正确用法 欧拉降幂
根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α".&q ...
- 3884: 上帝与集合的正确用法 —— 欧拉降幂
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
- BZOJ-3884 上帝与集合的正确用法 欧拉定理
再次仰望高端玩家Po姐 3884: 上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 772 Solved: 361 [Submit] ...
- bzoj3884 上帝与集合的正确用法
题意:求2^2^2^2^2.......^2%p的值,T组询问. 欧拉降幂多用几次就好了. 顺便试了下fwrite输出优化 ,效果显著. #include<cstring> #includ ...
- [题解]bzoj3884 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
- BZOJ3884 上帝与集合的正确用法 (欧拉定理)
根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α". ...
- bzoj3884上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
最新文章
- 前端学习笔记2017.6.12 CSS控制DIV
- oracle 非数字型转数字型
- matlab读取指定路径excel文件,MATLAB读取Excel文件
- (案例)使用Cookie保存用户最后一次访问的时间
- Mysql Explain的简单使用
- 互联网日报 | 7月8日 星期四 | 小鹏汽车港交所上市;同程生活宣布申请破产;紫光国微市值突破千亿元...
- 在.net中序列化读写xml方法的总结(转载)
- 区块链需要学习哪些东西_区块链主要学习哪些知识?
- 乐视跳过服务器验证,pandwonload不能登录?试试跳过启动验证
- 关于计算机网络的主题报告,计算机网络与物联网工程研究所组织开展“安全先锋沙龙”主题报告活动...
- Angular(02)-- Angular-CLI命令
- 安装8in1飞行模拟器过程
- 6. 机器人正运动学---齐次变换矩阵的三种解读
- mysql2000数据库四合一_sql2000四合一版下载|microsoft sql server2000 简体中文4合一版附sql 2000 sp4 补丁_ - 极光下载站...
- manjaro顶部显示网速
- 美丽心灵 A Beautiful Mind
- BadImageFormatException-试图加载格式不正确的程序(0x8007000B)
- PHP file_get_contents函数详解
- SYD88811新DTM测试
- Android 系统广播(大全)
热门文章
- python—内置函数-字符串,eval,isinstance
- 折半查找算法及分析(手工过程)
- 数据结构0类模板的使用
- 网址出现error.aspx?aspxerrorpath=404.htm?aspxerrorpath=的原因及解决办法转
- awk 多文件操作2种实现方法
- Tech·Ed 2009
- php安装dat,PHP Parsing a .dat file
- 人工通道会取消吗_二七政策将用于ETC?高速或将取消人工收费通道
- vb在服务器上新建文件夹,vb.net-如果不存在,如何在VB中创建文件夹?
- 努比亚z17s刷原生安卓_电脑运行手机APP,不会没关系,我推荐你使用显卡服务器运行安卓模拟器...