题意:求2^2^2^2^2.......^2%p的值,T组询问。

欧拉降幂多用几次就好了。

顺便试了下fwrite输出优化 ,效果显著。

#include<cstring>
#include<iostream>
#include<cctype>
#include<cstdio>
#define writ(x,c) write(x),push(c);
using namespace std;
inline char nc()
{static char buf[100000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{char c;int x=0;bool f=0;for(; !isdigit(c); c=nc()) if(c=='-') f=1;for(; isdigit(c); c=nc()) x=(x<<1)+(x<<3)+c-48;return (f ? -x : x);
}
char pbuf[100000],*pp=pbuf;
void push(const char c)
{if(pp-pbuf==100000) fwrite(pbuf,1,100000,stdout),pp=pbuf;*pp++=c;
}
void write(int x)
{static int sta[35];int top=0;do{sta[top++]=x%10,x/=10;}while(x);while(top) push(sta[--top]+'0');
}
const int M=1001001;
int phi[M],prime[M],tot;
bool not_prime[M];
inline int Phi(int x)
{int i,re=x;for(i=2; i*i<=x; i++)if(x%i==0){re/=i;re*=i-1;while(x%i==0)x/=i;}if(x^1) re/=x,re*=x-1;return re;
}
inline int KSM(long long x,int y,int p)
{long long res=1;while(y){if(y&1) (res*=x)%=p;(x*=x)%=p;y>>=1;}return res%p;
}
inline int calc(int p)
{if(p==1) return 0;int tmp=0,cur,res;while(~p&1) p>>=1,++tmp;cur=Phi(p);res=calc(cur);(res+=cur-tmp%cur)%=cur,res=KSM(2,res,p);return res<<tmp;
}
int main()
{register int T=read(),p;while(T--){p=read();writ(calc(p),'\n');}fwrite(pbuf,1,pp-pbuf,stdout);
}

转载于:https://www.cnblogs.com/mordor/p/9776495.html

bzoj3884 上帝与集合的正确用法相关推荐

  1. BZOJ-3884 上帝与集合的正确用法 欧拉定理

    再次仰望高端玩家Po姐 3884: 上帝与集合的正确用法 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 772 Solved: 361 [Submit] ...

  2. [题解]bzoj3884 上帝与集合的正确用法

    Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...

  3. BZOJ3884 上帝与集合的正确用法 (欧拉定理)

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

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

    Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作&quo ...

  5. BZOJ3884上帝与集合的正确用法-欧拉函数

    刚开始我想的是欧拉降幂,可是觉得复杂度还是挺高的就去找了一下题解. 思路大方向没有问题,仍然是使用欧拉函数降低指数然后递归处理.但是不是简单的使用欧拉降幂而是应该对模数p稍微处理一下.因为底数已经确定 ...

  6. BZOJ3884 上帝与集合的正确用法 【欧拉定理】

    题目 对于100%的数据,T<=1000,p<=10^7 题解 来捉这道神题 欧拉定理的一般形式: \[a^{m} \equiv a^{m \mod \varphi(p) + [m \ge ...

  7. bzoj 3884: 上帝与集合的正确用法(欧拉函数)

    3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2574  Solved: 1151 [Submit][Status] ...

  8. 【bzoj3884】上帝与集合的正确用法 扩展欧拉定理

    题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α&quo ...

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

    题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α&quo ...

最新文章

  1. nodejs 各种插件
  2. 手把手教你如何做建模竞赛(baseline代码讲解)
  3. TypeScript 类型兼容
  4. 浅入浅出Typescript Decorators
  5. Spring 3.1 –从数据库加载XML配置的属性
  6. 设计模式7----代理模式
  7. Incorrect string value: '/xE7/xA8/x8B/xE5/xBA/x8F...' for column 'course' at row 1
  8. 北大OJ(POJ 3237)鸡兔同笼
  9. 前端开发还可以这么玩?元数据实践分享
  10. linux运行隐藏脚本,linux 下隐藏进程的一种方法及遇到的坑
  11. [独库骑行之我们路过高山]翻越哈希勒根达坂
  12. 网页内容变化监控提醒
  13. STM32F030外部中断配置
  14. Excel宏的介绍及应用
  15. oracle排列组合,Oracle SQL排列组合之排列问题
  16. android系统蓝牙音箱功能吗,Android蓝牙开发系列文章-其实你的手机可以变成一个蓝牙音箱...
  17. 01 - Win10+Ubuntu双系统安装换清华源 - 研0
  18. DOC文档转换成WPS格式要怎样操作
  19. 服装行业如何利用长尾关键词挖掘推广?
  20. 【转】在win10接双显示器(扩展模式)怎么把鼠标游标切换到第二台显示器上?

热门文章

  1. 拿到BAT等大厂offer以后,我发现了关于秋招的一些真相
  2. python315题的漫漫通关之路
  3. 开发工程中遇到的BUG
  4. Mysql定时执行任务实现方法
  5. android之SQLite数据库insert操作
  6. MVC6 (ASP.NET5) 自定义TagHelper
  7. 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别...
  8. USB转串口 FT232/PL2303/CH340 驱动以及使用体会
  9. Kubernetes 容器编排
  10. html5 数字滚动选择器,Odometer使用JavaScript和CSS制作数字滑动效果