第一问快速幂板子

第二问把式子转化为\( xy\equiv Z(mod\ P)\rightarrow xy+bP=z \),然后扩展欧几里得

第三问BSGS板子

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<map>
  4. #include<cmath>
  5. using namespace std;
  6. long long T,K,y,z,p;
  7. map<long long,long long>mp;
  8. long long gcd(long long a,long long b)
  9. {
  10. return !b?a:gcd(b,a%b);
  11. }
  12. long long ksm(long long a,long long b,long long p)
  13. {
  14. long long r=1ll;
  15. a%=p;
  16. while(b)
  17. {
  18. if(b&1)
  19. r=r*a%p;
  20. a=a*a%p;
  21. b>>=1;
  22. }
  23. return r;
  24. }
  25. void exgcd(long long a,long long b,long long &x,long long &y)
  26. {
  27. if(!b)
  28. {
  29. x=1,y=0;
  30. return;
  31. }
  32. exgcd(b,a%b,y,x);
  33. y-=a/b*x;
  34. }
  35. int main()
  36. {
  37. scanf("%lld%lld",&T,&K);
  38. while(T--)
  39. {
  40. scanf("%lld%lld%lld",&y,&z,&p);
  41. if(K==1)
  42. printf("%lld\n",ksm(y,z,p));
  43. else if(K==2)
  44. {
  45. //p=-p;
  46. long long t=gcd(y,p);
  47. if(z%t)
  48. {
  49. puts("Orz, I cannot find x!");
  50. continue;
  51. }
  52. y/=t,z/=t,p/=t;
  53. long long xx,yy;
  54. exgcd(y,p,xx,yy);
  55. printf("%lld\n",(xx*z%p+p)%p);
  56. }
  57. else
  58. {
  59. y%=p;
  60. if(!y&&!z)
  61. {
  62. puts("1");
  63. continue;
  64. }
  65. if(!y)
  66. {
  67. puts("Orz, I cannot find x!");
  68. continue;
  69. }
  70. mp.clear();
  71. long long m=ceil(sqrt(p)),t=1;
  72. mp[1]=m+1;
  73. for(long long i=1;i<m;i++)
  74. {
  75. t=t*y%p;
  76. if(!mp[t])
  77. mp[t]=i;
  78. }
  79. long long tmp=ksm(y,p-m-1,p),now=1,f=0;
  80. for(long long k=0;k<m;k++)
  81. {
  82. long long i=mp[z*now%p];
  83. if(i)
  84. {
  85. if(i==m+1)
  86. i=0;
  87. printf("%lld\n",k*m+i);
  88. f=1;
  89. break;
  90. }
  91. now=now*tmp%p;
  92. }
  93. if(!f)
  94. puts("Orz, I cannot find x!");
  95. }
  96. }
  97. return 0;
  98. }

bzoj 2242: [SDOI2011]计算器【扩展欧几里得+快速幂+BSGS】的更多相关文章

  1. BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)

    同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...

  2. URAL 1141. RSA Attack(欧拉定理+扩展欧几里得+快速幂模)

    题目链接 题意 : 给你n,e,c,并且知道me ≡ c (mod n),而且n = p*q,pq都为素数. 思路 : 这道题的确与题目名字很相符,是个RSA算法,目前地球上最重要的加密算法.RSA算 ...

  3. bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...

  4. BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )

    没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...

  5. BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]

    2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...

  6. BZOJ 1965 洗牌(扩展欧几里得)

    容易发现,对于牌堆里第x张牌,在一次洗牌后会变成2*x%(n+1)的位置. 于是问题就变成了求x*2^m%(n+1)=L,x在[1,n]范围内的解. 显然可以用扩展欧几里得求出. # include ...

  7. bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS

    1:快速幂  2:exgcd  3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...

  8. bzoj 2242 [SDOI2011]计算器(数论知识)

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

  9. [原博客] BZOJ 2242 [SDOI2011] 计算器

    题目链接 noip级数论模版题了吧.让求三个东西: 给定y,z,p,计算`Y^Z Mod P` 的值. 给定y,z,p,计算满足`xy≡ Z ( mod P )`的最小非负整数. 给定y,z,p,计算 ...

随机推荐

  1. 由八数码问题引入。对BFS有更深考虑

    12号到今天共研究八数码问题poj1077,首先用的是普通BFS,遇到很多问题,开始用一个二级指针作为结构成员,知道了二级指针与二维数值名的不同!http://write.blog.csdn.net/ ...

  2. hdu6215 Brute Force Sorting(模拟)

    题意 给一个长度为n(n<=1e5)的序列,如果一个位置i满足a[i-1]>a[i]或者a[i]>a[i+1],那么我们就称该位置是不合法的位置 先把序列中所有不合法的位置统一找出来 ...

  3. [转] OracleDataReader.Read()是否有值

    TongYu2009的原文地址 当你执行一次OracleDataReader.Read()是Bool型),注意是只读取一个!如果你的Select语句执行结果是空,或者所有的结果都已经读取完了则Orac ...

  4. topcoder srm 553

    div1 250pt: 题意:... 解法:先假设空出来的位置是0,然后模拟一次看看是不是满足,如果不行的话,我们只需要关心最后栈顶的元素取值是不是受空白处的影响,于是还是模拟一下. // BEGIN ...

  5. php 获取TZ时间格式

    php将时间格式化成T Z的方法 gmdate("c") 这个函数的用法,学会了吧!!! <?php var_dump(gmdate("c")); ini ...

  6. 微信小程序之 ShoppingCart(购物车)

    1.项目目录 2.逻辑层 group.js // pages/group/group.js Page({ /** * 页面的初始数据 */ data: { goodslist: [ { id: &qu ...

  7. Android自己定义之TextView跑马灯的监听

    TextView都有跑马灯的效果,假设说让你去监听跑马灯效果的运行.我认为这个需求有点二了.可是也要实现. 思路: 1.自己定义View  继承TextView   这样的方法过于麻烦,仅仅是监听一个 ...

  8. I2C上拉电阻取值范围

    I2C总线是微电子通信控制领域中常用的一种总线标准,具备接线少,控制简单,速率高等优点.在I2C电路中常见的上拉电阻有1k.1.5k.2.2k.4.7k.5.1k.10k等等,但是应该如何根据开发要求 ...

  9. 《鸟哥的Linux私房菜-基础学习篇(第三版)》(六)

    第5章 首次登陆与在线求助man page        1. 首次登陆系统        首先谈了首次登陆CentOS 5.x界面.登陆选项中的会话是能够使用不同的图形界面来操作整个Linux系统. ...

  10. boost的内存管理

    smart_ptr raii ( Resource Acquisition Is Initialization ) 智能指针系列的都统称为smart_ptr.包含c++98标准的auto_ptr 智能 ...