http://www.lydsy.com/JudgeOnline/problem.php?id=3884 (题目链接)

题意

  求

Solution

  解决的关键:

  当${n>φ(p)}$,有$${a^n≡a^{n\%φ(p)+φ(p)}~(mod~p)}$$

  然后递归log(p)次就会出解:http://blog.csdn.net/skywalkert/article/details/43955611

细节

代码

// bzoj3884
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=10000010;
int phi[maxn],vis[maxn],p[maxn]; void calphi() {
phi[1]=1;
for (int i=2;i<maxn;i++) {
if (!vis[i]) {p[++p[0]]=i;phi[i]=i-1;}
for (int j=1;j<=p[0];j++) {
if (p[j]*i>maxn) break;
vis[p[j]*i]=1;
if (i%p[j]==0) {phi[p[j]*i]=phi[i]*p[j];break;}
else phi[p[j]*i]=phi[p[j]]*phi[i];
}
}
}
int power(int a,int b,int c) {
int res=1;
while (b) {
if (b&1) res=(LL)res*a%c;
b>>=1;a=(LL)a*a%c;
}
return res;
}
int solve(int p) {
if (p==1) return 0;
int res=solve(phi[p])+phi[p];
return power(2,res,p);
}
int main() {
calphi();
int T,P;scanf("%d",&T);
while (T--) {
scanf("%d",&P);
printf("%d\n",solve(P));
}
return 0;
}

  

【bzoj3884】 上帝与集合的正确用法的更多相关文章

  1. bzoj3884上帝与集合的正确用法

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

  2. BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理

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

  3. BZOJ3884: 上帝与集合的正确用法(欧拉函数 扩展欧拉定理)

    Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3860  Solved: 1751[Submit][Status][Discuss] Descripti ...

  4. bzoj3884 上帝与集合的正确用法

    a^b mod P=a^(b mod phi(p)) mod p,利用欧拉公式递归做下去. 代码 #pragma comment(linker,"/STACK:1024000000,1024 ...

  5. bzoj3884: 上帝与集合的正确用法 欧拉降幂公式

    欧拉降幂公式:http://blog.csdn.net/acdreamers/article/details/8236942 糖教题解处:http://blog.csdn.net/skywalkert ...

  6. bzoj3884: 上帝与集合的正确用法 扩展欧拉定理

    题意:求\(2^{2^{2^{2^{...}}}}\%p\) 题解:可以发现用扩展欧拉定理不需要很多次就能使模数变成1,后面的就不用算了 \(a^b\%c=a^{b\%\phi c} gcd(b,c) ...

  7. bzoj千题计划264:bzoj3884: 上帝与集合的正确用法

    http://www.lydsy.com/JudgeOnline/problem.php?id=3884 欧拉降幂公式 #include<cmath> #include<cstdio ...

  8. BZOJ3884 上帝与集合的正确用法(欧拉函数)

    设f(n)为模n时的答案,由2k mod n=2k mod φ(n)+φ(n) mod n(并不会证),且k mod φ(n)=f(φ(n)),直接就可以得到一个递推式子.记搜一发即可. #inclu ...

  9. bzoj3884: 上帝与集合的正确用法(数论)

    感觉是今天洛谷月赛T3的弱化版,会写洛谷T3之后这题一眼就会写了... 还是欧拉扩展定理 于是就在指数上递归%phi(p)+phi(p)直到1,则后面的指数就都没用了,这时候返回,边回溯边快速幂.因为 ...

  10. [bzoj3884]上帝与集合的正确用法——欧拉函数

    题目大意 题解 出题人博客 代码 #include <bits/stdc++.h> using namespace std; const int M = 10001000; int phi ...

随机推荐

  1. matlab FDR校正

    http://home.52brain.com/forum.php?mod=viewthread&tid=27066&page=1#pid170857 http://www.mathw ...

  2. 方差分析 ANOVA

    来源: http://blog.sciencenet.cn/blog-479412-391481.html 方差分析是为了比较多个总体样本均数是否存在差别.该方法有RA.Fisher首先提出,后来由G ...

  3. BZOJ 1191 【HNOI2006】 超级英雄Hero

    Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回 ...

  4. VMware-Transport(VMDB) error -44:Message.The VMware Authorization Service is not running解决方案

    出现的错误如下: 原因:本机中有一个VMware服务未开启导致的. 解决方案: 1.打开“运行”->输入services.msc !!!文章转自浩瀚先森博客,转载请注明,谢谢.http://ww ...

  5. 这些javascript面试题,你做对了几道?

    1.---------------------------------------------------- var fun = function(){ this.name = 'peter'; re ...

  6. 异步dcfifo的读写

    异步dcfifo的原理 Dcfifo即是Double clk fifo,意思是双时钟的fifo.或许你现在还不知道什么是fifo,那我就先从fifo(就是同步fifo,不过同步fifo在实际运用中比较 ...

  7. android之MP3播放器(1)

    该播放器只是对本地的MP3文件进行简单的播放 布局文件 布局文件中设置了三个按钮分别来进行播放.暂停和继续播放 <?xml version="1.0" encoding=&q ...

  8. go linux 学习记录

    1 yum install mercurial 安装mercurial包 2 yum install git 安装git包 3 yum install gcc 安装gcc 4  然后就可以下载gola ...

  9. webpack入坑之旅(二)loader入门

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack 在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  10. extJs学习基础 容器的介绍

    Viewport: 一个专门的容器用于可视应用领域(浏览器窗口). Viewport渲染自身到网页的documet body区域, 并自动将自己调整到适合浏览器窗口的大小,在窗口大小发生改变时自动适应 ...