上帝与集合的正确用法

\(T\) 组数据,每次给定 \(p\),求

\[\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod p
\]

数据范围:\(1\le T\le 1000\),\(1\le p\le 10^7\)。


这篇题解主要是给自己看的,因为小蒟蒻从未见过这种骚操作。


首先这个式子虽是无限的,但是答案是固定的。

  • 先来几个引理
\[a^{\varphi(p)}\equiv1\pmod p
\]
\[a^b\equiv a^{(b\bmod \varphi(p))+\varphi(p)}\pmod p
\]

所以上面那个递归式可以转化:

\[2^{\left(2^{\left(2^{\cdots}\right)}\right)}\equiv 2^{\left(2^{\left(2^{\cdots}\right)}\bmod\varphi(p)\right)+\varphi(p)}\pmod p
\]

所以可以先求 \(\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod \varphi(p)\),又可以先求 \(\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod \varphi(\varphi(p))\)……最终一直递归下去。

\[\because
\begin{cases}
\varphi(1)=1\\
\varphi(p)<p&p>1\\
\end{cases}\\
\therefore \varphi(\varphi(\varphi(\cdots\varphi(p)\cdots)))=1\\
\]

因为 \(\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod 1=0\),所以递归有边界了,可以开码了。


时间复杂度 \(\Theta({\rm max}p+T\log^2 p)\)。


  • 代码:
#include <bits/stdc++.h>
using namespace std; //Start
typedef long long ll;
typedef double db;
#define mp(a,b) make_pair(a,b)
#define x(a) a.first
#define y(a) a.second
#define b(a) a.begin()
#define e(a) a.end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f; //Data
const int N=1e7; //Sieve
bitset<N+7> np;
int phi[N+7];
vector<int> pr;
void Sieve(){
np[1]=phi[1]=1;
for(int i=2;i<=N;i++){
if(!np[i]) pr.pb(i),phi[i]=i-1;
for(int p:pr)if(i*p<=N){
np[i*p]=1;
if(i%p==0){phi[i*p]=phi[i]*p;break;}
phi[i*p]=phi[i]*phi[p];
} else break;
}
} //Pow
int Pow(int a,int x,int mod){
if(a==0) return 0; int res=1;
for(;x;a=1ll*a*a%mod,x>>=1)if(x&1) res=1ll*res*a%mod;
return res;
}
int Jump(int p){ // 两行核心代码
if(p==1) return 0;
return Pow(2,Jump(phi[p])+phi[p],p);
} //Main
int main(){
int t; scanf("%d",&t);
Sieve();
for(int ti=1;ti<=t;ti++){
int p; scanf("%d",&p);
printf("%d\n",Jump(p));
}
return 0;
}

祝大家学习愉快!

题解-洛谷P4139 上帝与集合的正确用法的更多相关文章

  1. 洛谷 P4139 上帝与集合的正确用法 解题报告

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

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

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

  3. 洛谷 P4139 上帝与集合的正确用法

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

  4. [洛谷P4139]上帝与集合的正确用法

    题目大意:多次询问,每次给你$p$询问$2^{2^{2^{\dots}}}\bmod p$ 题解:扩展欧拉定理,求出$\varphi(p)$即可.因为$2^{2^{2^{\dots}}}>> ...

  5. 洛谷P4139 上帝与集合的正确用法 拓欧

    正解:拓展欧拉定理 解题报告: 首先放上拓欧公式? if ( b ≥ φ(p) )  ab ≡ ab%φ(p)+φ(p)(mod p)else ab≡ab mod φ(p) (mod p) 首先利用扩 ...

  6. 【洛谷】P4139 上帝与集合的正确用法

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

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

    本题是欧拉定理的应用.我这种蒟蒻当然不知道怎么证明啦! 那么我们就不证明了,来直接看结论: ab≡⎧⎩⎨⎪⎪ab%φ(p)abab%φ(p)+φ(p)gcd(a,p)=1gcd(a,p)≠1,b< ...

  8. Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925

    题目传送门 题目中的式子很符合扩展欧拉定理的样子.(如果你还不知扩展欧拉定理,戳).对于那一堆糟心的2,我们只需要递归即可,递归边界是模数为1. 另外,本题中好像必须要用快速乘的样子...否则无法通过 ...

  9. luogu P4139 上帝与集合的正确用法(扩展欧拉定理)

    本蒟蒻现在才知带扩展欧拉定理. 对于任意的\(b\geq\varphi(p)\)有 \(a^b\equiv a^{b\ mod\ \varphi(p)+\varphi(p)}(mod\ p)\) 当\ ...

随机推荐

  1. 一文带你玩转对象存储COS文档预览

    随着"互联网+"的发展,各行各业纷纷"去纸化",商务合同.会议纪要.组织公文.商品图片.培训视频.学习课件.随堂讲义等电子文档无处不在.而要查看文档一般需要先下 ...

  2. go-zero之web框架

    go-zero 是一个集成了各种工程实践的 web 和 rpc 框架,其中rest是web框架模块,基于Go语言原生的http包进行构建,是一个轻量的,高性能的,功能完整的,简单易用的web框架 服务 ...

  3. 利用s3-test进行ceph的接口兼容性测试

    前言 ceph的rgw能够提供一个兼容性的s3的接口,既然是兼容性,当然不可能是所有接口都会兼容,那么我们需要有一个工具来进行接口的验证以及测试,这个在其他测试工具里面有类似的posix接口验证工具, ...

  4. 大数据和Hadoop平台介绍

    大数据和Hadoop平台介绍 定义 大数据是指其大小和复杂性无法通过现有常用的工具软件,以合理的成本,在可接受的时限内对其进行捕获.管理和处理的数据集.这些困难包括数据的收入.存储.搜索.共享.分析和 ...

  5. 「CSP-S 2019」Emiya 家今天的饭

    description loj 3211 solution 看到题目中要求每种主要食材至多在一半的菜中被使用,容易想到补集转换. 即\(ans=\)总方案数-存在某一种食材在一半以上的菜中被使用的方案 ...

  6. 基于dubbo-config api编写provider,api

    不管是XML配置还是注解方式,最终都会转换成java api对应的配置对象. provider: import com.alibaba.dubbo.config.ApplicationConfig;i ...

  7. zk下的kafka节点

    zk从某种程度上说是kafka的单点失效组件. /brokers:里面保存了Kafk集群的所有信息,包括每台broker的注册信息,集群上所有topic的信息等. /controller:保存了Kaf ...

  8. 如何在Linux下关闭ARP协议

    方法一:临时关闭ARP协议 echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf ...

  9. LeetCode 018 4Sum

    题目描述:4Sum Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c ...

  10. form 表单上传文件及传输数据的编码格式

    form中的 action  控制请求往什么地方提交 method  请求方式 如果不写默认是get 请求 如果想传文件 必须要把默认的urlencoded的改成enctype="multi ...