\(Description\)

  给定p,

  

\(Solution\)

  欧拉定理:\(若(a,p)=1\),则\(a^b\equiv a^{b\%\varphi(p)}(mod\ p)\).

  扩展欧拉定理:\(a^b\equiv a^{b\%\varphi(p)+\varphi(p)}(mod\ p)\) (a为任意整数,b,p为正整数,且\(b>\varphi(p)\)(a,p不一定要互质).证明.

  指数是无穷的,但是模数是有限的,从不断减小p去考虑。

  设\(f(p)=2^{2^{2^{...}}}mod\ p\),次数是无穷的,所以肯定\(>p\)。根据扩展欧拉定理可得

\[\begin{aligned} f(p)&=2^{2^{2^{...}}mod \varphi(p)+\varphi(p)}(mod\ p)\\&=2^{f(\varphi(p))+\varphi(p)}(mod\ p)\end{aligned}
\]

  这样就有了f的递推式,可以直接递归计算。

  那么复杂度是多少?

  若\(p\)为偶数,则\(\varphi(p)\leq\frac{p}{2}\);若\(p\)为奇数,则\(\varphi(p)\)为偶数,转化为偶数的情况。所以最多递归\(log_2p\)层。

  \(n>2时,\varphi(n)始终为偶数\)的一个证明:

  设\(n=\prod p_i^{a_i}\),则\(\varphi(n)=\prod (p_i^{a_i}-p_i^{a_i-1})\).

  若\(n=2^a,a\geq 2\),则\(\varphi(n)=2^a-2^{a-1}=2^{a-1}(2-1)\),为偶数。

  否则,若\(n>2\),且至少有一个奇素数p,则\(p_a-p_{a-1}(a\geq 1)\)为偶数(因为两个数都是奇数)。

  另官方题解.

#include<cstdio>
#include<cstring>
typedef long long LL;
const int N=1e7+3,M=10005; int p,val[N],P[M+3],cnt;
bool NP[M+3]; void Init()
{
for(int i=2;i<M;++i)
{
if(!NP[i]) P[++cnt]=i;
for(int j=1;j<=cnt&&i*P[j]<M;++j)
{
NP[i*P[j]]=1;
if(!(i%P[j])) break;
}
}
}
int FP(LL x,int k,LL p)
{
LL t=1;
for(;k;k>>=1,x=x*x%p)
if(k&1) t=t*x%p;
return t;
}
int Get_Phi(int n)//O(sqrt(n))求单值欧拉函数
{
LL res=1;int mod=n;
for(int t,i=1;i<=cnt&&P[i]*P[i]<=n;++i)
if(!(n%P[i]))
{
n/=P[i], (res*=(P[i]-1))%=mod;
while(!(n%P[i])) n/=P[i],(res*=P[i])%=mod;
}
if(n>1) (res*=n-1)%=mod;//别忘n本身可能是个质数
return res;
}
int Calc(int n)
{
if(val[n]!=-1) return val[n];
int t=Get_Phi(n);
return val[n]=FP(2,Calc(t)+t,n);
} int main()
{
Init();
int t; memset(val,0xff,sizeof val), val[1]=0;
for(scanf("%d",&t);t--;)
{
scanf("%d",&p);
printf("%d\n",Calc(p));
}
return 0;
}

BZOJ.3884.上帝与集合的正确用法(扩展欧拉定理)的更多相关文章

  1. BZOJ 3884: 上帝与集合的正确用法 扩展欧拉定理 + 快速幂

    Code: #include<bits/stdc++.h> #define maxn 10000004 #define ll long long using namespace std; ...

  2. bzoj 3884 上帝与集合的正确用法 指数循环节

    3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description   根据一些 ...

  3. 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]

    题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...

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

    题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...

  5. BZOJ3884题解上帝与集合的正确用法--扩展欧拉定理

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3884 分析 扩展欧拉定理裸题 欧拉定理及证明: 如果\((a,m)=1\),则\(a^{ ...

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

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

  7. 【数学】[BZOJ 3884] 上帝与集合的正确用法

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

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

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

  9. bzoj 3884 上帝与集合的正确用法(递归,欧拉函数)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3884 [题意] 求2^2^2… mod p [思路] 设p=2^k * q+(1/0) ...

随机推荐

  1. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Self-hosted debug

    1. 前言 2. 关于self-hosted debug Debugger调试器 是操作系统或系统软件的一部分,它会处理debug exception或修改debug system register, ...

  2. find结合rm删除或mv移动文件的方法

    删除过期的备份文件,多用find结合rm方法,可以使用-exec或xargs -exec rm -rf {} \; 或 find /home/mysqlbackup -name "*$thi ...

  3. Python3学习笔记25-logging模块

    logging模块,Python自带用来记录日志的模块. 因为工作需要用到关于日志的,最近一直都在看关于日志模块的东西,百度了很多文章,可惜都是看的让人一头雾水,最后运气不错,找到一篇很详细的文章.传 ...

  4. @Html.Action()

    背景 在这里主要想谈下mvc,最初几年都是用的webform,作为一个资深傻瓜程序员多年,后来到处听说mvc,终于在某天下定决心实验下mvc,其实关键还是在于easyui,因为它的请求数据方式和mvc ...

  5. JavaScript的类型自动转换高级玩法JSFuck

    0 前言 最开始是不小心在微信公众号(程序员大咖)看到一篇JS的高逼格代码,然后通过里面的链接跳转到了JSFuck的wiki,就像顺着迷宫找宝藏的感觉,感叹JS的自动类型转换的牛逼. 1 样例 (!( ...

  6. 性能测试十八:jmeter分布式

    一台压力机产生得压力是有限的,尤其是jmeter,java本来性能就不是很好,并发特别多的时候,jmeter的性能会急剧下降,正常的接口,若单台压力机,超过1000并发以后,jmeter的性能就不怎么 ...

  7. JQUery利用Uploadify插件实现文件异步上传(十一)

    一:简介: Uploadify是JQuery的一个上传插件,实现的效果非常好,带进度显示 ,且Ajax异步,能一次性上传多个文件,功能强大,使用简单 1.支持单文件或多文件上传,可控制并发上传的文件数 ...

  8. 东师理想云平台异步任务处理系统V2.0重构思路

    现存问题分析: 1.功能太多,而且杂糅到一个程序中,架构不清晰,出问题不好调试.2.系统重启后,不登录到桌面,程序不运行,用户体验差.经常的下载403等错误3.处理程序卡死,处理速度慢等问题,不支持多 ...

  9. HDU 2594 最长相同前后缀

    Sample Inputclintonhomerriemannmarjorie Sample Output0rie 3 输入两个字符串 ,求最长相同前后缀直接把两个字符串连接在一起求next就行了,唯 ...

  10. Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

    1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信 ...