http://www.lydsy.com/JudgeOnline/problem.php?id=2242 (题目链接)

题意

  给出y,z,p。求:1.yz mod p;2.xy=z(mod p);3.yx=z(mod p)。

Solution

  1.快速幂

  2.exgcd

  3.BSGS

细节

  数学题就是细节多,具体看代码。

代码

  1. // bzoj2242
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<cstdio>
  7. #include<cmath>
  8. #include<map>
  9. #define LL long long
  10. #define inf 2147483640
  11. #define Pi acos(-1.0)
  12. #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
  13. using namespace std;
  14.  
  15. map<int,int> mp;
  16.  
  17. LL power(LL a,LL b,LL c) {
  18. LL res=1;
  19. while (b) {
  20. if (b&1) res=res*a%c;
  21. b>>=1;a=a*a%c;
  22. }
  23. return res;
  24. }
  25. void exgcd(LL a,LL b,LL &d,LL &x,LL &y) {
  26. if (b==0) {d=a;x=1;y=0;return;}
  27. exgcd(b,a%b,d,y,x);
  28. y-=a/b*x;
  29. }
  30. LL BSGS(LL a,LL b,LL p) { //求解a^x=b(mod p),p为素数,无解返回-1.
  31. if (a%p==0 && b==0) return 1;
  32. if (a%p==0) return -1;
  33. mp.clear();mp[1]=0; //注意a^0=1
  34. int m=ceil(sqrt(p)); //向上取整,避免漏解
  35. LL inv=power(a,p-m-1,p),e=1; //inv为a^m的逆元,用费马小定理求
  36. for (int i=1;i<m;i++) { //求e[i]数组
  37. e=e*a%p;
  38. if (!mp.count(e)) mp[e]=i;
  39. }
  40. for (int i=0;i<m;i++) { //枚举a^(im),a^(im+1),a^(im+2)~~~
  41. if (mp.count(b)) return mp[b]+i*m; //一定要是mp.count(),因为mp[b]可能为0
  42. else b=b*inv%p;
  43. }
  44. return -1;
  45. }
  46. int main() {
  47. LL T,K,Y,Z,P;scanf("%lld%lld",&T,&K);
  48. while (T--) {
  49. scanf("%lld%lld%lld",&Y,&Z,&P);
  50. if (K==1) printf("%lld\n",power(Y,Z,P));
  51. if (K==2) {
  52. LL x,y,d;
  53. exgcd(Y,P,d,x,y);
  54. if (Z%d!=0) puts("Orz, I cannot find x!");
  55. else printf("%lld\n",((Z/d)*x%(P/d)+(P/d))%(P/d));
  56. }
  57. if (K==3) {
  58. LL ans=BSGS(Y,Z,P);
  59. if (ans==-1) puts("Orz, I cannot find x!");
  60. else printf("%lld\n",ans);
  61. }
  62. }
  63. return 0;
  64. }

  

  

【bzoj2242】 SDOI2011—计算器的更多相关文章

  1. [bzoj2242][Sdoi2011]计算器_exgcd_BSGS

    计算器 bzoj-2242 Sdoi-2011 题目大意:裸题,支持快速幂.扩展gcd.拔山盖世 注释:所有数据保证int,10组数据. 想法:裸题,就是注意一下exgcd别敲错... ... 最后, ...

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

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

  3. BZOJ2242 [SDOI2011]计算器

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

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

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

  5. bzoj2242: [SDOI2011]计算器 BSGS+exgcd

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

  6. 【数学 BSGS】bzoj2242: [SDOI2011]计算器

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

  7. [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.给 ...

  8. bzoj2242: [SDOI2011]计算器 && BSGS 算法

    BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...

  9. 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)

    传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...

  10. bzoj千题计划246:bzoj2242: [SDOI2011]计算器

    http://www.lydsy.com/JudgeOnline/problem.php?id=2242 #include<map> #include<cmath> #incl ...

随机推荐

  1. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

  2. 【WPF】TextBox样式重写注意事项

    1.普通控件重写需要添加一行 <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="C ...

  3. 杭电1008 Elevator

    #include <stdio.h> #include <stdlib.h> int main() { int n; int i,j; int num[101]; while( ...

  4. Working Set缓存算法(转)

    为了加深对缓存算法的理解,特转此篇,又由于本文内容过多,故不做翻译,原文地址Working Set页面置换算法 In the purest form of paging, processes are ...

  5. hadoop家族之pig入门

    昨天成功运行第一个在hadoop集群上面的python版本的wordcount,今天白天继续看网上提供的文档.下午上头给定的回复是把hadoop家族都熟悉一下,那就恭敬不如从命,开始学习pig吧- 这 ...

  6. 理解Java虚拟机体系结构

    1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...

  7. Mysql之case语句(附带实例)

    这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case  when… then …end 1.判断的同时改变其值 eg:   ...

  8. android开发------响应用户事件

    今天的内容有点简单,不难,就是为按钮添加onClick事件.  新知识点: Intent类的简单使用 startActivity方法 一般事件都由按钮触发,现在我们要实现的是当用户点击按钮的时候,启动 ...

  9. Java网络编程——概述

    一.网络模型 OSI七层模型 应用层 表示层 会话层 传输层: 网络层: 链路层 物理层:比特流 TCP/IP四层模型 应用层 传输层:数据包,TCP/UDP 网络层:数据帧 物理层:比特流 二.网络 ...

  10. Django- 1- 数据库设置

    更改配置文件中的 字段更改为 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', //按照自己的数据库配置配置,现在所配置 ...