BZOJ.3884.上帝与集合的正确用法(扩展欧拉定理)
\(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\)。根据扩展欧拉定理可得
\]
这样就有了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.上帝与集合的正确用法(扩展欧拉定理)的更多相关文章
- BZOJ 3884: 上帝与集合的正确用法 扩展欧拉定理 + 快速幂
Code: #include<bits/stdc++.h> #define maxn 10000004 #define ll long long using namespace std; ...
- bzoj 3884 上帝与集合的正确用法 指数循环节
3884: 上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 根据一些 ...
- 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]
题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...
- 【bzoj3884】上帝与集合的正确用法 扩展欧拉定理
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- BZOJ3884题解上帝与集合的正确用法--扩展欧拉定理
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3884 分析 扩展欧拉定理裸题 欧拉定理及证明: 如果\((a,m)=1\),则\(a^{ ...
- BZOJ 3884 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...
- 【数学】[BZOJ 3884] 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元” ...
- BZOJ 3884 上帝与集合的正确用法(扩展欧拉定理)
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- bzoj 3884 上帝与集合的正确用法(递归,欧拉函数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3884 [题意] 求2^2^2… mod p [思路] 设p=2^k * q+(1/0) ...
随机推荐
- python标准库之secrets
secrets secrets是python3.6加入到标准库的,使用secrets模块,可以生成适用于处理机密信息(如密码,帐户身份验证,安全令牌)的加密强随机数. 导入 import secret ...
- SharePoint 2010:搜索服务当前处于脱机状态
错误 搜索服务当前处于脱机状态.请访问 SharePoint 管理中心中的"服务器上的服务"页,以验证是否启用了该服务.这也可能是由于正在移动索引器所致. 正在配置网站集搜索关 ...
- tomcat jetty
背景 其实这个比较毫无意义.只是当时突然知道了jetty,所以记下来,对于开发人员来说选择哪个一般意义不大. 转载 从架构上来看 Tomcat 在处理少数非常繁忙的连接上更有优势,也就是说连接的生命周 ...
- rabbitmq 源码安装
官网地址:rabbitmqhttp://www.rabbitmq.com/releases/rabbitmq-server/官网地址:erlanghttp://erlang.org/download/ ...
- Android通讯:通话
Android通讯之通话功能的实现: 在Android中,android.telephony.TelephonyManager对象是开发者获取当前通话网络相关信息的窗口,通过TelephonyMana ...
- Linux(CentOS7)安装zip、unzip命令
安装命令: yum install -y unzip zip
- LeetCode(43):字符串相乘
Medium! 题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = &quo ...
- PHP 将数组的值赋值给一组变量
经常需要将一个字符串分割成一组值,然后赋值给不同的变量. 逐行赋值非常繁琐,于是查了一下 PHP 中是否有类似 python 中 a, b = (a, b) 的操作. 果然有 $info = arra ...
- python 全栈开发,Day34(基于UDP协议的socket)
昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...
- 《LINQ技术详解C#》-4.LINQ到对象
public static string[] Presidents { get; } = { "Adams", "Arthur", "Buchanan ...