P4139 上帝与集合的正确用法
本题是欧拉定理的应用。我这种蒟蒻当然不知道怎么证明啦!
那么我们就不证明了,来直接看结论:

或者
ab≡⎧⎩⎨⎪⎪ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod pab≡⎧⎩⎨⎪⎪ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod p)
或者观看这个

那么再来看本题,主要使用了后者:
所以可以写出递归式:
f(p)=qpow(2,f(ask_phi(p))+ask_phi(p),p);
得解。
题外话:我本来先打个表求出10^7以内的phi[],然后直接调用的,结果全T...
发现n<=1000,就用了ask_phi(),然后就过了。
#include <cstdio>
using namespace std;
const int N = ;
typedef long long LL; LL phi[N]; void make_phi(int n)
{
for(int i=;i<=n;i++) phi[i]=i;
for(int i=;i<=n;i+=) phi[i]/=;
for(int i=;i<=n;i+=)
{
if(phi[i]==i)
{
for(int j=i;j<=n;j+=i) phi[j]=(phi[j]/i)*(i-);
}
}
return;
} LL ask_phi(int x)
{
LL ans=x;
for(int i=;i*i<=x;i++)
{
if(x%i==)
{
while(x%i==) x/=i;
ans=(ans/i)*(i-);
}
}
if(x>) ans=(ans/x)*(x-);
return ans;
} LL qpow(LL a,LL b,LL m)
{
LL ans=;
while(b)
{
if(b&) ans=(ans*a)%m;
b=b>>;
a=(a*a)%m;
}
return ans;
} LL f(int p)
{
if(p==) return ;
return qpow(,f(ask_phi(p))+ask_phi(p),p);
} int main()
{
int n,x;
scanf("%d",&n);
//make_phi(N);
while(n--)
{
scanf("%d",&x);
printf("%lld\n",f(x));
}
return ;
}
AC代码
我们学到了什么姿势:
1.欧拉函数:φ(n)=[1,n]中与n互质的数的个数。
求phi(x):
LL ask_phi(int x)
{
LL ans=x;
for(int i=;i*i<=x;i++)
{
if(x%i==)
{
while(x%i==) x/=i;
ans=(ans/i)*(i-);
}
}
if(x>) ans=(ans/x)*(x-);
return ans;
}
ask_phi()
打表phi[]:
void make_phi(int n)
{
for(int i=;i<=n;i++) phi[i]=i;
for(int i=;i<=n;i+=) phi[i]/=;
for(int i=;i<=n;i+=)
{
if(phi[i]==i)
{
for(int j=i;j<=n;j+=i) phi[j]=(phi[j]/i)*(i-);
}
}
return;
}
make_phi()
二进制快速幂:
LL qpow(LL a,LL b,LL m)
{
LL ans=;
while(b)
{
if(b&) ans=(ans*a)%m;
b=b>>;
a=(a*a)%m;
}
return ans;
}
qpow()
P4139 上帝与集合的正确用法的更多相关文章
- 洛谷 P4139 上帝与集合的正确用法 解题报告
P4139 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新 ...
- 洛谷P4139 上帝与集合的正确用法 [扩展欧拉定理]
题目传送门 上帝与集合的正确用法 题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”. ...
- 题解-洛谷P4139 上帝与集合的正确用法
上帝与集合的正确用法 \(T\) 组数据,每次给定 \(p\),求 \[\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod p ...
- 洛谷 P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- 【洛谷】P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天,上帝创造了一个世界的基本元素,称做“元”. 第二天,上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- 洛谷P4139 上帝与集合的正确用法 拓欧
正解:拓展欧拉定理 解题报告: 首先放上拓欧公式? if ( b ≥ φ(p) ) ab ≡ ab%φ(p)+φ(p)(mod p)else ab≡ab mod φ(p) (mod p) 首先利用扩 ...
- [洛谷P4139]上帝与集合的正确用法
题目大意:多次询问,每次给你$p$询问$2^{2^{2^{\dots}}}\bmod p$ 题解:扩展欧拉定理,求出$\varphi(p)$即可.因为$2^{2^{2^{\dots}}}>> ...
- Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925
题目传送门 题目中的式子很符合扩展欧拉定理的样子.(如果你还不知扩展欧拉定理,戳).对于那一堆糟心的2,我们只需要递归即可,递归边界是模数为1. 另外,本题中好像必须要用快速乘的样子...否则无法通过 ...
- luogu P4139 上帝与集合的正确用法(扩展欧拉定理)
本蒟蒻现在才知带扩展欧拉定理. 对于任意的\(b\geq\varphi(p)\)有 \(a^b\equiv a^{b\ mod\ \varphi(p)+\varphi(p)}(mod\ p)\) 当\ ...
随机推荐
- RabbitMQ 发布订阅-实现延时重试队列(参考)
RabbitMQ消息处理失败,我们会让失败消息进入重试队列等待执行,因为在重试队列距离真正执行还需要定义的时间间隔,因此,我们可以将重试队列设置成延时处理.今天参考网上其他人的实现,简单梳理下消息延时 ...
- Canary机制的绕过
目标程序下载 提取码:8ypi 1.检查程序开启了哪些安全保护机制 Canary与NX开启了 Canary机制简介 64位的canary机制,会在函数头部添加: mov rax,QWORD PTR f ...
- shell+curl监控网站页面(域名访问状态),并利用sendemail发送邮件
应领导要求,对公司几个主要站点的域名访问情况进行监控.下面分享一个监控脚本,并利用sendemail进行邮件发送. 监控脚本如下:下面是写了一个多线程的网站状态检测脚本,直接从文件中读出站点地址,然后 ...
- python-知识回顾-16
知识回顾 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 欧 ...
- Linux内核分析作业第七周
一. 预处理.编译.链接 gcc hello.c -o hello. gcc编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤. 预处理 → 编译 → 汇编 → 链接 预处理:编译 ...
- 个人git链接和git学习心得总结
个人git链接和git学习心得总结 个人git链接: https://github.com/hanzhaoyan Git 是 Linux 的创始人 Linus Torvalds 开发的开源和免费的版本 ...
- Windows 7 64位安装cURL
安装cURL. 1, 下载64位的SSL版cURL,网址: http://curl.download.nextag.com/download/curl-7.21.7-win64-ssl-sspi.zi ...
- pandas修改全列的时间格式 无需使用apply
df.date.dt.strftime('%Y%m%d') #实现全列修改时间格式
- org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unexpected failure during bean definition parsing Offending resource: class path resource [applicationC
这个错误是 org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration proble ...
- Node params和query的Get请求传参
//1:加载http express框架//2:创建服务器const http = require("http");const express = require("ex ...