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

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

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. Jmeter(三十四)_Beanshell解析并提取json响应

    1:前置条件 将fastjson-1.2.49.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中:否则会报:Typed variable declaration ...

  2. ExtJS初探:在项目中使用ExtJS

    注意:本文写作时间是 2013 年,所讲的 ExtJS 如今早已过时,请勿学习! -------------------------------- 今天ExtJS官网发布了ExtJS最新正式版4.2. ...

  3. BugkuCTF 计算器

    前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...

  4. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  5. kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)

    公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM ...

  6. UPC-5063-二分图最大匹配

    好吧二分图的最小点覆盖=最大匹配 这道题也就变成模板题了... 写一个提醒,在写二分图时,尽量清零操作清空为-1,比如这个题,匹配数组girl[]如果清空为0,代表每个点都与0点连接,但是实际上是并没 ...

  7. python 协程库gevent学习--源码学习(一)

    总算还是要来梳理一下这几天深入研究之后学习到的东西了. 这几天一直在看以前跟jd对接的项目写的那个gevent代码.为了查错,基本上深入浅出了一次gevent几个重要部件的实现和其工作的原理. 这里用 ...

  8. MySQL下载安装详情教程

    1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community Server进行下载 ...

  9. JQuery从入门到精通

    1.JQuery查找元素 例:将表格的单元格中件数和重量差异不为0的数据标红 代码如下: <style> .notice{ color: red; } .right{ color: gre ...

  10. js對象

    js聲明一個數據,即使沒有賦值,也是創建了一個對象: js的所有數據都是對象,對象裡面有屬性也有方法,屬性方法是對象中的成員: 訪問對象的屬性:objectname.屬性名 訪問對象的方法:objec ...