【bzoj2242】: [SDOI2011]计算器

1.快速幂

2.扩展欧几里得(费马小定理)

3.BSGS

  1. /* http://www.cnblogs.com/karl07/ */
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <map>
  7. #include <algorithm>
  8. using namespace std;
  9.  
  10. #define LL long long
  11. int T,K;
  12. LL a,b,p;
  13.  
  14. LL Q_tim(LL x,LL y,LL p){
  15. LL ans=;
  16. while (y){
  17. if (y&) ans=(ans+x)%p;
  18. x=(x+x)%p;
  19. y=(y>>);
  20. }
  21. return ans;
  22. }
  23.  
  24. LL Q_pow(LL x,LL y,LL p){
  25. LL ans=;
  26. while (y){
  27. if (y&) ans=ans*x%p;
  28. x=x*x%p;
  29. y=(y>>);
  30. }
  31. return ans;
  32. }
  33.  
  34. void ex_gcd(LL a,LL b,LL &x,LL &y,LL &gcd){
  35. if (b==) {gcd=a;x=;y=;return;}
  36. ex_gcd(b,a%b,y,x,gcd);
  37. y-=x*(a/b);
  38. }
  39.  
  40. void p2(LL a,LL b,LL p){
  41. LL x,y,gcd,g,ans=p+;
  42. ex_gcd(a,p,x,y,gcd);
  43. if (b%gcd!=){ puts("Orz, I cannot find x!"); return;}
  44. ex_gcd(a/gcd,p/gcd,x,y,g);
  45. x=x*(b/gcd)%p;
  46. x=(x+p)%p;
  47. printf("%lld\n",x);
  48. }
  49.  
  50. void BSGS(LL a,LL b,LL p){
  51. if ((a== && b!=) || (a== && b!=)) { puts("Orz, I cannot find x!"); return;}
  52. LL sz=(LL)ceil(sqrt(p)),inv,e=;
  53. map<LL,LL> x;
  54. x.clear();
  55. x[]=;inv=Q_pow(Q_pow(a,sz,p),p-,p);
  56. for (int i=;i<sz;i++) {e=Q_tim(e,a,p); if (!x.count(e)) x[e]=i;}
  57. for (int i=;i<sz;i++) {
  58. if (x.count(b)) {printf("%lld\n",i*sz+x[b]); return;}
  59. b=Q_tim(b,inv,p);
  60. }
  61. puts("Orz, I cannot find x!");
  62. }
  63.  
  64. int main(){
  65. scanf("%d%d",&T,&K);
  66. for (int i=;i<=T;i++){
  67. scanf("%lld%lld%lld",&a,&b,&p);
  68. if (K==) printf("%lld\n",Q_pow(a%p,b,p));
  69. if (K==) p2(a%p,b%p,p);
  70. if (K==) BSGS(a%p,b%p,p);
  71. }
  72. return ;
  73. }

【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS的更多相关文章

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

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

  2. 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得

    [bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1)  就好 ...

  3. BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS

    BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS 题意: 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p, ...

  4. BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)

    污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...

  5. [bzoj2242][SDOI2011][计算器] (Baby-Step-Giant-Step+快速幂+exgcd)

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

  6. 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法

    BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...

  7. 【数论】【扩展欧几里得】Codeforces 710D Two Arithmetic Progressions

    题目链接: http://codeforces.com/problemset/problem/710/D 题目大意: 两个等差数列a1x+b1和a2x+b2,求L到R区间内重叠的点有几个. 0 < ...

  8. 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】

    Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...

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

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

随机推荐

  1. Java并发 两个线程交替执行和死锁

    今天看到一个题:两个线程交替打印奇数和偶数,即一个线程打印奇数,另一个打印偶数,交替打印从1到100.想了下有多重实现方法. wait和notify方法: public class OddEven { ...

  2. 一文读懂非关系型数据库(NoSQL)

    为了更好的理解非关系型数据库,我又深入的度娘了下 原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&co ...

  3. Rails、Nginx、Passenger、bundle之间的协作关系

    引自:http://www.zhihu.com/question/20062163 Bundle是Gem包的依赖管理工具,RubyGem本身有依赖管理为何还要Bundle呢?有时候两个gem虽然都依赖 ...

  4. dialog插件demo

    基本操作 默认窗体 new Dialog('这是一个默认对话框').show(); 非模态对话框 new Dialog('非模态对话框,可以打开多个!',{modal:false}).show(); ...

  5. Windows_Server_2008远程桌面多用户登陆的配置方法

    开启远程桌面后,Windows Vista(或Windows 2008)下默认只支持一个administrator用户登陆,一个登录后另一个就被踢掉了,下面提供允许同一个用户名同时多个用户登录的配置方 ...

  6. Java中Object.hashCode contract

    面试时在这个问题上犯了个错误,只重写了equals方法,而没有覆盖hashCode()方法. 回来重读了Effective Java的Item 9,里面提到Object.hashCode contra ...

  7. 基于ActiveMQ的Topic的数据同步——初步实现

    一.背景介绍 公司自成立以来,一直以做项目为主,算是经累经验吧,自去年以来,我们部门准备将以前的项目做成产品,大概细分了几个小的产品,部们下面又分了几个团队,分别负责产品的研发,而我们属于平台团队,负 ...

  8. python爬虫(3)--异常处理

    1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中,我们需要用try-except语句来包围并捕获相应的异常. ...

  9. 关于uboot的一些优化

    转载于:http://blog.163.com/solylee@126/blog/static/1718231572010101910485331/ 本人的开发环境是u-boot-1.1.6版本,fe ...

  10. 封装 Toast

    一. ToastView.java 1 import android.content.Context; import android.view.LayoutInflater; import andro ...