本题是欧拉定理的应用。我这种蒟蒻当然不知道怎么证明啦!

那么我们就不证明了,来直接看结论:

ab≡⎧⎩⎨⎪⎪ab%φ(p)abab%φ(p)+φ(p)gcd(a,p)=1gcd(a,p)≠1,b<ϕ(p)gcd(a,p)≠1,b≥ϕ(p)(modp)

或者

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 上帝与集合的正确用法的更多相关文章

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

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

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

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

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

    上帝与集合的正确用法 \(T\) 组数据,每次给定 \(p\),求 \[\left(2^{\left(2^{\left(2^{\cdots}\right)}\right)}\right)\bmod p ...

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

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

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

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

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

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

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

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

  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. “论 ofo 是如何影响今日头条发展的”

    近段时间, ofo 小黄车押金难退的消息频频曝出.尽管 OFO 已经宣布押金只能在线上退还,但是线上退押金也难,因此很多的用户还是选择到 ofo 北京总部“要个说法”.记者昨天在现场发现,位于北京中关 ...

  2. Python代码转c#部分参考样例

    最近在做一部分Pyhton代码转c#代码的工作,以下案例亲自都测试过,现整理出来希望对有帮助的同学提供参考: Python | C# *:first-child{margin-top:0 !impor ...

  3. Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)

    之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...

  4. LInux下设置账号有效时间 以及 修改用户名(同时修改用户组名和家目录)

    在linux系统中,默认创建的用户的有效期限都是永久的,但有时候,我们需要对某些用户的有效期限做个限定!比如:公司给客户开的ftp账号,用于客户下载新闻稿件的.这个账号是有时间限制的,因为是付费的.合 ...

  5. Maven 项目生成或者update jdk变为1.5的问题

    在使用Maven构建项目时,生成的maven项目jdk默认使用的是jdk1.5. 在手动修改了jdk之后,update project之后jdk又会变为1.5. 或者用eclipse的Maven插件生 ...

  6. iOS实时查看App运行日志

    前言: 本文讨论如何实时查看输出在console控制台的日志. 一.Xcode 通过Window->Devices打开devices界面,选择我们的手机,也能看到手机中运行的进程输出的日志.如图 ...

  7. Python_初识函数和返回值_22

    #len s = '金老板小护士' len(s) def my_len(): #自定义函数 i = 0 for k in s: i += 1 print(i) length = my_len() pr ...

  8. 第一个Sprint

    项目名字:四则运算APP 开发环境:java 团队名称:会飞的小鸟 团队成员:陈志棚  李炫宗   刘芮熔  徐侃  罗伟业 一.经过宿舍世纪讨论后我们剔除了一些不合理的设计,比如网站管理员这一部分在 ...

  9. Golang的格式化输出fmt.Printf

    本文来源:Go by example. Golang的格式化输出 和 C语言的标准输出基本一样,但是增加了一些针对Golang语言的特有数据结构的格式化输出方式. 一下就是实例: package ma ...

  10. 定义类型别名(typedef,using)

    说到类型别名,无非是给类型名(如int,char,float,double,bool)取一个比较有特殊含义的名字而已 最常用的关键莫过于 typedef 吧 typedef最常见的用法是与结构体str ...