题解-洛谷P4139 上帝与集合的正确用法
\(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\)。
这篇题解主要是给自己看的,因为小蒟蒻从未见过这种骚操作。
首先这个式子虽是无限的,但是答案是固定的。
- 先来几个引理
\]
\]
所以上面那个递归式可以转化:
\]
所以可以先求 \(\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))\)……最终一直递归下去。
\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 上帝与集合的正确用法的更多相关文章
- 洛谷 P4139 上帝与集合的正确用法 解题报告
P4139 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新 ...
- 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]
题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...
- 洛谷 P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- [洛谷P4139]上帝与集合的正确用法
题目大意:多次询问,每次给你$p$询问$2^{2^{2^{\dots}}}\bmod p$ 题解:扩展欧拉定理,求出$\varphi(p)$即可.因为$2^{2^{2^{\dots}}}>> ...
- 洛谷P4139 上帝与集合的正确用法 拓欧
正解:拓展欧拉定理 解题报告: 首先放上拓欧公式? if ( b ≥ φ(p) ) ab ≡ ab%φ(p)+φ(p)(mod p)else ab≡ab mod φ(p) (mod p) 首先利用扩 ...
- 【洛谷】P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天,上帝创造了一个世界的基本元素,称做“元”. 第二天,上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- P4139 上帝与集合的正确用法
本题是欧拉定理的应用.我这种蒟蒻当然不知道怎么证明啦! 那么我们就不证明了,来直接看结论: ab≡⎧⎩⎨⎪⎪ab%φ(p)abab%φ(p)+φ(p)gcd(a,p)=1gcd(a,p)≠1,b< ...
- Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925
题目传送门 题目中的式子很符合扩展欧拉定理的样子.(如果你还不知扩展欧拉定理,戳).对于那一堆糟心的2,我们只需要递归即可,递归边界是模数为1. 另外,本题中好像必须要用快速乘的样子...否则无法通过 ...
- luogu P4139 上帝与集合的正确用法(扩展欧拉定理)
本蒟蒻现在才知带扩展欧拉定理. 对于任意的\(b\geq\varphi(p)\)有 \(a^b\equiv a^{b\ mod\ \varphi(p)+\varphi(p)}(mod\ p)\) 当\ ...
随机推荐
- MVCC(转)
什么是 MVCC MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL.Oracle.PostgreSQL 等)引擎 ...
- js,昨天的日期
var mydate = new Date(); var yester = mydate-24*60*60*1000; var yesterday = new Date(); yesterday.se ...
- 冷门的HTML - tabindex 的作用
冷门的HTML - tabindex 的作用 HTML 的 tabindex 属性开发过程中一般不会使用到,最近开发中有个需求兼顾富交互,便总结了一下.本篇文章同时收录在我的[前端知识点]中,Gith ...
- win10,ubuntu时间不对问题
sudo apt-get install ntpdate sudo ntpdate time.windows.com # ntp2.aliyun.com 然后将时间更新到硬件上: sud ...
- 去年去阿里面试,被问到ArrayList和LinkedList,我是这样回答的!
前言 在一开始基础面的时候,很多面试官可能会问List集合一些基础知识,比如: ArrayList默认大小是多少,是如何扩容的? ArrayList和LinkedList的底层数据结构是什么? Arr ...
- 怎么绘制C语言选择和循环语句的思维导图
C语言是一门非常基础的计算机语言,是大部分本科学生的公共专业,在C语言的学习中,选择和循环语句是至关重要的部分,利用思维导图可以有效节约时间并加深知识点记忆. 接下来就为大家介绍一下我用iMindMa ...
- 关于Camtasia2020安装完成之后无法运行问题的解决方法
在录像编辑软件Cmtasia更新到了2020版本之后,有部分小伙伴们遇到了这样的问题:在我们安装好软件之后,居然无法运行.今天小编就给大家介绍一下该如何解决这个问题. 方法一: 第一步,选中桌面上Ca ...
- web自动化测试--iframe切换
什么是iframe切换,我们在测试web网页过程中,可能会遇到一个网页中嵌套另一个网页的情况,如下图,就是一个ifame嵌套的例子 我们如何切换呢,别急,webdriver里有方法,可以切换到ifra ...
- JUC并发工具包之CyclicBarrier & CountDownLatch的异同
1.介绍 本文我们将比较一下CyclicBarrier和CountDownLatch并了解两者的相似与不同. 2.两者是什么 当谈到并发,将这两者概念化的去解释两者是做什么的,这其实是一件很有挑战的事 ...
- go学习路线资料
编辑器 JetBrains公司出品的,goland go初步学习路线 Go 指南 如何使用Go编程 实效Go编程 Go by Example 中文版 参考: Go 语言学习资料与社区索引 Go入门指南 ...