Description

根据一些书上的记载,上帝的一次失败的创世经历是这样的:
第一天, 上帝创造了一个世界的基本元素,称做“元”。
第二天, 上帝创造了一个新的元素,称作“α”。“α”被定义为“元”构成的集合。容易发现,一共有两种不同的“α”。
第三天, 上帝又创造了一个新的元素,称作“β”。“β”被定义为“α”构成的集合。容易发现,一共有四种不同的“β”。
第四天, 上帝创造了新的元素“γ”,“γ”被定义为“β”的集合。显然,一共会有16种不同的“γ”。
如果按照这样下去,上帝创造的第四种元素将会有65536种,第五种元素将会有2^65536种。这将会是一个天文数字。
然而,上帝并没有预料到元素种类数的增长是如此的迅速。他想要让世界的元素丰富起来,因此,日复一日,年复一年,他重复地创造着新的元素……
然而不久,当上帝创造出最后一种元素“θ”时,他发现这世界的元素实在是太多了,以致于世界的容量不足,无法承受。因此在这一天,上帝毁灭了世界。
至今,上帝仍记得那次失败的创世经历,现在他想问问你,他最后一次创造的元素“θ”一共有多少种?
上帝觉得这个数字可能过于巨大而无法表示出来,因此你只需要回答这个数对p取模后的值即可。
你可以认为上帝从“α”到“θ”一共创造了10^9次元素,或10^18次,或者干脆∞次。
一句话题意:

Input

接下来T行,每行一个正整数p,代表你需要取模的值

Output

T行,每行一个正整数,为答案对p取模后的值

Sample Input

3
2
3
6

Sample Output

0
1
4

HINT

对于100%的数据,T<=1000,p<=10^7
题解:

结论题,知道那个结论,递归求值就可以了。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define ll long long
using namespace std;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;
}  ll pw(ll bas,ll re,ll mod){ll ans=1;while(re){if(re&1) ans=(ans*bas)%mod;bas=(bas*bas)%mod;re>>=1;}return ans;
}ll work(int p){if(p==1) return 0;int k=0;while(~p&1) p>>=1,k++;ll phi_p=phi(p);ll re=work(phi_p);re=(re+phi_p-k%phi_p)%phi_p;re=pw(2,re,p)%p;return re<<k;
}
int main()
{int t;cin>>t;while(t--){int p;cin>>p;printf("%lld\n",work(p));}return 0;
}

转载于:https://www.cnblogs.com/renjianshige/p/7612801.html

BZOJ - 3884 上帝与集合的正确用法相关推荐

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

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

  2. bzoj 3884 上帝与集合的正确用法 扩展欧拉定理

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

  3. BZOJ 3884: 上帝与集合的正确用法 欧拉降幂

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

  4. (bzoj 3884 上帝与集合的正确用法)欧拉定理

    题目 Time Limit: 5 Sec Memory Limit: 128 MB Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元 ...

  5. BZOJ 3884 上帝与集合的正确用法 (欧拉定理)

    题目大意:求2^(2^(2^(2^(2^...)))) mod p的值 题解:https://blog.csdn.net/popoqqq/article/details/43951401 #inclu ...

  6. 洛谷4139 bzoj 3884 上帝与集合的正确用法

    传送门 •题意 求$2^{2^{2^{2^{2^{2^{...^{2}}}}}}}$ (无穷个2) 对p取模的值 •思路 设答案为f(p) $2^{2^{2^{2^{2^{2^{...^{2}}}}} ...

  7. BZOJ 3884 上帝与集合的正确用法

    学习借鉴了skywalkert大佬的题解 Orz 首先题目需要用到欧拉函数的一个性质 $\forall x\geq \phi(p)$ $a^x\equiv a^{x \; mod \; \phi(p) ...

  8. 3884: 上帝与集合的正确用法 —— 欧拉降幂

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

  9. 3884: 上帝与集合的正确用法 欧拉函数+降幂公式

    Orz题解 降幂公式:a^x ≡a^(x modϕ(p)+ϕ(p)) (mod p) #include<iostream> #include<cstdio> #include& ...

最新文章

  1. 服务器技术综述(三)
  2. HDOJ 1236 排名(练耐心题)
  3. 可穿插PC端浏览器任何位置的爱心分割
  4. 20 | 散列表(下):为什么散列表和链表经常会一起使用?
  5. Page.ClientScript.RegisterStartupScript() 方法与Page.ClientScript.RegisterClientScriptBlock() 方法
  6. [计算机网络] - 调节参数提高 TCP 性能
  7. php完整表单实例,PHP学习(五) 完整表单实例 HTML内嵌PHP
  8. SpringBoot整合Redis 之 StringRedisTemplate、RedisTemplate 基础
  9. 英伟达RTX 2080 Ti值得买么?深度学习测试来了!
  10. 阿里研究院安筱鹏:云计算推动企业迈向高频竞争时代
  11. STM32串行驱动LCD12864显示屏程序代码
  12. 人人商城小程序总是弹出“百度未授权使用地图API”的解决方法
  13. 中国 各大银行bankCode 开户行代码和名称 高清银行图标
  14. ping 命令的用法大全(图文详解)
  15. linux下替代windows的软件列表
  16. Excel-RANK函数排名与拓展
  17. 为什么计算机里没有桌面显示不出来,电脑开机后桌面显示不出来如何修复_电脑开机后桌面没有东西的处理办法-系统城...
  18. 开发中国最好的视频推荐系统
  19. Bootstrap-30分钟就能上手的Bootstrap教程【史上最全】
  20. Golang高并发安全(一)

热门文章

  1. 关于CTF竞赛的了解
  2. 解决Intellij idea 修改控制台的字体样式问题
  3. Ubuntu 18.04 解压缩 abc.rar 文件
  4. 一文道破 结构体,枚举,联合
  5. 基于超算平台气象预警并行计算架构研究
  6. 多模态交互的概念与现状
  7. people who change the files in the active changelist also change
  8. Meta元宇宙内容VP:VR游戏与元宇宙关系紧密,社交并非全部
  9. 市政工程是指什么?包括哪些工程项目?
  10. HTML5七夕情人节表白网页(新年倒计时-红色雪花) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱