传送门

一题更比三题强

1操作直接裸的快速幂

2操作用exgcd求出最小正整数解

3操作用BSGS硬上

然后没有然后了

  1. //minamoto
  2. #include<cstdio>
  3. #include<map>
  4. #include<cmath>
  5. #include<iostream>
  6. #define ll long long
  7. using namespace std;
  8. #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  9. char buf[<<],*p1=buf,*p2=buf;
  10. inline ll read(){
  11. #define num ch-'0'
  12. char ch;bool flag=;ll res;
  13. while(!isdigit(ch=getc()))
  14. (ch=='-')&&(flag=true);
  15. for(res=num;isdigit(ch=getc());res=res*+num);
  16. (flag)&&(res=-res);
  17. #undef num
  18. return res;
  19. }
  20. inline ll ksm(ll a,ll b,ll p){
  21. ll res=;
  22. while(b){
  23. if(b&) (res*=a)%=p;
  24. (a*=a)%=p,b>>=;
  25. }
  26. return res;
  27. }
  28. ll exgcd(ll a,ll b,ll &x,ll &y){
  29. if(!b){x=,y=;return a;}
  30. ll d=exgcd(b,a%b,x,y);
  31. ll t=x;x=y,y=t-y*(a/b);
  32. return d;
  33. }
  34. map<ll,ll> mp;
  35. ll BSGS(ll a,ll b,ll p){
  36. mp.clear();
  37. b%=p;int t=sqrt((double)p)+,tot=;
  38. for(int j=;j<t;++j){
  39. int val=b*tot%p;
  40. mp[val]=j,tot=tot*a%p;
  41. }
  42. if(!tot) return b==?:-;
  43. a=tot,tot=;
  44. for(int i=;i<=t;++i){
  45. int j=mp.find(tot)==mp.end()?-:mp[tot];
  46. if(j>=&&i*t-j>=) return i*t-j;
  47. tot=tot*a%p;
  48. }
  49. return -;
  50. }
  51. ll t,k,z,y,p;
  52. void solve1(){
  53. while(t--){
  54. y=read(),z=read(),p=read();
  55. printf("%lld\n",ksm(y,z,p));
  56. }
  57. }
  58. void solve2(){
  59. while(t--){
  60. y=read(),z=read(),p=read();
  61. ll x=,yy=,d=;
  62. d=exgcd(y,p,x,yy);
  63. if(z%d!=){puts("Orz, I cannot find x!");}
  64. else{
  65. ll tmp=abs(p/d);
  66. x=(((x*z)/d)%tmp+tmp)%tmp;
  67. printf("%lld\n",x);
  68. }
  69. }
  70. }
  71. void solve3(){
  72. while(t--){
  73. y=read(),z=read(),p=read();
  74. ll ans=BSGS(y,z,p);
  75. if(ans!=-) printf("%lld\n",ans);
  76. else puts("Orz, I cannot find x!");
  77. }
  78. }
  79. int main(){
  80. // freopen("testdata.in","r",stdin);
  81. t=read(),k=read();
  82. switch(k){
  83. case :solve1();break;
  84. case :solve2();break;
  85. case :solve3();break;
  86. }
  87. return ;
  88. }

洛谷P2485 [SDOI2011]计算器(exgcd+BSGS)的更多相关文章

  1. 洛谷 P2485 [SDOI2011]计算器 解题报告

    P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...

  2. 【bzoj2242】[SDOI2011]计算器 EXgcd+BSGS

    题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p, ...

  3. BZOJ2242[SDOI2011]计算器——exgcd+BSGS

    题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p, ...

  4. 【洛谷P2485】计算器

    BSGS模板题 代码如下 #include <bits/stdc++.h> using namespace std; typedef long long LL; LL fpow(LL a, ...

  5. P2485 [SDOI2011]计算器

    P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...

  6. BZOJ2242 [SDOI2011]计算器 【BSGS】

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 4741  Solved: 1796 [Submit][Sta ...

  7. [洛谷P2491] [SDOI2011]消防

    洛谷题目链接:[SDOI2011]消防 题目描述 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超 ...

  8. BZOJ2243 洛谷2486 [SDOI2011]染色 树链剖分

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2243 题目传送门 - 洛谷2486 题意概括 一棵树,共n个节点. 让你支持以下两种操作,共m次操 ...

  9. 洛谷 P2495 [SDOI2011]消耗战(虚树,dp)

    题面 洛谷 题解 虚树+dp 关于虚树 了解一下 具体实现 inline void insert(int x) { if (top == 1) {s[++top] = x; return ;} int ...

随机推荐

  1. ASP.NET MVC 页面使用富文本控件的XSS漏洞问题

    目前在做的项目存在XSS安全漏洞! 原因是有一些页面使用了富文本编辑框,为了使得其内容可以提交,为相关action设置了[ValidateInput(false)] 特性: [HttpPost] [V ...

  2. 哈希表的java实现

    一.为什么要用哈希表 树的操作通常需要O(N)的时间级,而哈希表中无论存有多少数据,它的插入和查找(有时包括删除)只需要接近常量级的时间,即O(1)的时间级. 但是哈希表也有一定的缺点:它是基于数组的 ...

  3. arm处理器的历史及现状

    1 arm处理器的发展历史 arm1 arm2 arm3 arm6 arm7 arm9 arm11 arm cortex 2 arm处理器现状 arm cortex A a即application,即 ...

  4. java之快速排序

    //基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据 ...

  5. LVS项目介绍

    LVS项目介绍 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Serve ...

  6. go 包的问题

    同一个包下的所有方法,都整合到一个里面去了,通过包名可以任意调用包下的方法. 文件夹的名字必须要和文件里面的package的名字一样,否则会报错... 导文件就是文件所在的包 导包import(),是 ...

  7. apache配置文件详解及虚拟主机的搭建

    1.404跳转: <IfModule dir_module>    DirectoryIndex index.php index.html /error.php</IfModule& ...

  8. 重新记录 ansible操作hadoop用户的问题

    前提是安装ansible 配置源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum i ...

  9. MAC 安装phantomjs

    step1:下载压缩包http://phantomjs.org/ step2:解压缩,我是解压缩到/Users/gxy/software step3:写入配置路径,vi ~/.bash_profile ...

  10. vue 表单验证省市县三联动

    <el-col :span="24"> <el-form-item label="所在地区" prop="region" ...