[bzoj3884] 上帝与集合的正确用法

[bzoj3884] 上帝与集合的正确用法

大家好,又见面了,我是全栈君。

题意:要你算这个玩意额:\(2^{2^{2^{…}}}\)

题解:

欧拉定理+递归

\(p=2^k*q (q为奇数)\)

题目要求\(2^{2^{2^{…}}}modp\)

变形为\(2^k(2^{2^{2^{…}}-k}modq)\) (这里需要在草稿纸上算一下)

由于q是个奇数,那么肯定与2的指数互质

原式变为\(2^k(2^{(2^{2^{…}}-k)mod\phi(q)}modq)\)

然后就可以递归求解了,当模数为1的时候,递归就结束了,然后就可以回溯计算了

递归次数不超过\(log_2p\) ,单次求\(\phi(p)\)的复杂度为\(\sqrt{p}\)

所以总复杂度为\(T*log_2p*\sqrt{p}\)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;

int gi() {
  int x=0,o=1; char ch=getchar();
  while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();
  if(ch=='-') o=-1,ch=getchar();
  while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
  return o*x;
}

int get_phi(int x) {
  int ret=x;
  for(int i=2; i*i<=x; i++) {
    if(x%i==0) {
      ret=ret/i*(i-1);
      while(x%i==0) x/=i;
    }
  }
  if(x>1) ret=ret/x*(x-1);
  return ret;
}

int qpow(ll x, int y, int mo) {
  ll ret=1;
  while(y) {
    if(y&1) ret=ret*x%mo;
    x=x*x%mo,y>>=1;
  }
  return ret;
}

int solve(int p) {
  if(p==1) return 0;
  int k=0,phi,ret;
  while(!(p&1)) p>>=1,k++;//while(p是个偶数)
  phi=get_phi(p);
  ret=solve(phi);
  (ret+=phi-k%phi)%=phi;
  ret=qpow(2,ret,p)%p;
  return ret<<k;
}

int main() {
  int T=gi();
  while(T--) {
    int p=gi();
    printf("%d\n", solve(p));
  }
  return 0;
}

转载于:https://www.cnblogs.com/HLXZZ/p/7617318.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108127.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 谷歌地图离线地图开发教程视频_谷歌地图离线

    谷歌地图离线地图开发教程视频_谷歌地图离线谷歌离线地图开发主要有两部分组成:1、获取离线地图数据;因为离线地图一般都是局域网,所以需要离线地图数据放在内网中使用;2、离线地图服务器搭建以及二次开发接口提供,离线地图是一种服务,就像我们Apache提供的WEB服务器一样,他是一种准们的地图服务:提供了包括WEB服务、TMS服务、WMTS服务等等。离线地图数据的获取:可以通过【大地图下载器】下载到。下面将一…

    2022年9月20日
    2
  • ODS浅析_ods分析

    ODS浅析_ods分析1,ODS和DW*根据Bill.Inmon的定义,“数据仓库是面向主题的、集成的、稳定的、随时间变化的,主要用于决策支持的数据库系统”  ;*ODS(OperationalDataStore)操作型数据存储,ODS具备数据仓库的部分特征和OLTP系统的部分特征,它是“集成的、当前或接近当前的、不断变化的”数据,一般不保留数据的变动轨迹,是数据仓库体系结构中的一个可选部分;ODSDW主要是…

    2022年9月26日
    2
  • pcap.h_程序定义了多个入口点,使用/main

    pcap.h_程序定义了多个入口点,使用/main1、命名程序:要创建ABAP/4程序,步骤如下:在“SAPR/3”初始屏幕上选择“工具->ABAP/4工作台”。出现“ABAP/4开发工作台”屏幕选择“ABAP/4编辑器”,“ABAP/4编辑器初始屏幕”为在“程序”字段中创建的程序输入名称(关于创建程序名称的详细信息,参见《命名程序规则》)。选择“创建”。注意:不论在“对象组件”下选择什么,都出现“A…

    2022年9月14日
    2
  • java 静态内部类的使用「建议收藏」

    java 静态内部类的使用「建议收藏」java静态内部类的使用

    2022年10月11日
    2
  • 补码加、减运算规则「建议收藏」

    补码加、减运算规则「建议收藏」在计算机中,通常总是用补码完成算术的加减法运算。其规则是:  [X+Y]补=[X]补+[Y]补,[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号…

    2022年4月19日
    51
  • Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件

    Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件

    2021年10月15日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号