题目描述

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

输入

输入包含多组数据。

第一行包含两个正整数T,K分别表示数据组数和询问类型(对于一个测试点内的所有数据,询问类型相同)。
以下行每行包含三个正整数y,z,p,描述一个询问。

输出

对于每个询问,输出一行答案。对于询问类型2和3,如果不存在满足条件的,则输出“Orz, I cannot find x!”,注意逗号与“I”之间有一个空格。

样例输入

【样例输入1】
3 1
2 1 3
2 2 3
2 3 3
【样例输入2】
3 2
2 1 3
2 2 3
2 3 3

样例输出

【样例输出1】
2
1
2
【样例输出2】
2
1
0


题解

EXgcd+BSGS

第一问直接快速幂。

第二问需要将xy≡z(mod p)转化为xy+tp=z,进而用EXgcd求解。

第三问是裸的BSGS。

根据费马小定理可知如果有解,答案一定小于p。

设m=√p(向上取整),再设x=km+b,其中k<m,b<m。

那么就有y^(km+b)≡z(mod p),即y^b≡z/y^km(mod p)。

于是我们可以将所有的y^b mod p加入到map中,然后枚举k,求出z/y^km,看是否有相同的值在map中即可。

本题特判比较多,具体详见代码。

#include <cstdio>
#include <cmath>
#include <map>
using namespace std;
typedef long long ll;
map<ll , ll> f;
map<ll , ll>::iterator it;
ll pow(ll x , ll y , ll mod)
{ll ans = 1;while(y){if(y & 1) ans = ans * x % mod;x = x * x % mod , y >>= 1;}return ans;
}
ll gcd(ll a , ll b)
{return b ? gcd(b , a % b) : a;
}
void exgcd(ll a , ll b , ll &x , ll &y)
{if(!b){x = 1 , y = 0;return;}exgcd(b , a % b , x , y);ll t = x;x = y , y = t - a / b * y;
}
int main()
{int T , k;scanf("%d%d" , &T , &k);while(T -- ){ll y , z , p;scanf("%lld%lld%lld" , &y , &z , &p);switch(k){case 1: printf("%lld\n" , pow(y , z , p)); break;case 2:{y %= p , z %= p; ll t = gcd(y , p) , x1 , x2;if(z % t != 0){printf("Orz, I cannot find x!\n");break;}y /= t , p /= t , z /= t , exgcd(y , p , x1 , x2) , x1 *= z;while(x1 < 0) x1 += p;while(x1 - p >= 0) x1 -= p;printf("%lld\n" , x1);break;}default:{y %= p , z %= p; if(!y){if(!z) printf("1\n");else printf("Orz, I cannot find x!\n");break;}ll m = (ll)ceil(sqrt(p)) , i , flag = 0 , t = 1 , temp;f.clear();for(i = 0 ; i < m ; i ++ ){if(f.find(t) == f.end()) f[t] = i;t = t * y % p;}temp = pow(y , p - m - 1 , p) , t = 1;for(i = 0 ; i <= m ; i ++ ){it = f.find(z * t % p) , t = t * temp % p;if(it != f.end()){printf("%lld\n" , i * m + it->second) , flag = 1;break;}}if(!flag) printf("Orz, I cannot find x!\n");}}}return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/6999367.html

【bzoj2242】[SDOI2011]计算器 EXgcd+BSGS相关推荐

  1. bzoj2242 [SDOI2011]计算器 exgcd+ksm+bsgs

    三个板子,注意bsgs的时候要特判无解,即a%p==0||b%p==0(bsgs还是很巧妙的..) 码: #include<iostream> #include<cstdio> ...

  2. [bzoj2242] [SDOI2011]计算器

    #570. [bzoj2242] [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ ...

  3. [bzoj2242][SDOI2011]计算器

    题目大意:三合一,给你$y,z,p$,求$x$,三种询问 $y^z\bmod{p}$ $xy\equiv z\pmod p$的最小非负整数 $y^z\equiv z\pmod p$的最小非负整数 题解 ...

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

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

  5. BZOJ 2242([SDOI2011]计算器-Baby Step Giant Step第1题)

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 744  Solved: 289 [Submit][Statu ...

  6. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  7. [SDOI2011]计算器 BSGS

    前两个操作都看出来做法了,第三个要用到BSGS这个算法 BSGS主要可以解 a^x=b(mod n)的 0<=x<n 的解 暂时先拿kb和hzwer的板子当黑盒吧..数论细节短时间内没有学 ...

  8. P2485-[SDOI2011]计算器【BSGS,exgcd,快速幂】

    正题 题目链接:https://www.luogu.com.cn/problem/P2485 题目大意 给出a,b,pa,b,pa,b,p要求一下一种 ab%pa^b\% pab%p的值 ax≡b(m ...

  9. 【codevs1565】【BZOJ2242】计算器,数论练习

    计算器 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 题目描述 Description 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算 ...

最新文章

  1. Prim算法(最小生成树;例题:nyoj38)
  2. oracle ogg00423,ogg实现Oracle到SQL Server 2005的同步
  3. 3、(小数类型)FLOAT、DOUBLE、DECIMAL
  4. 结对项目——电梯调度算法的实现和测试
  5. 源码varnish安装
  6. 复合梯形公式与复合辛普森公式matlab_时尚女装套装的公式图纸分享
  7. 从零开始学习python编程-从零开始的Python学习 -- 简单的练习题
  8. (6)Python集合
  9. Web/前端性能优化
  10. 用luac给lua脚本加密
  11. [Python]经纬度转换
  12. 编程过程中常见几何数学公式汇总
  13. 端游体验服服务器维护怎么办,经典区高清天堂体验服维护公告
  14. Harmony integration in Seurat V3 pipeline
  15. python为什么卸载不了_为什么Python3.8删除不了?
  16. vipkid和vipjr比较,哪个更适合小升初学习?
  17. 国内android开发之墙痛,Android面试题-机型适配之痛,例如三星、小米、华为、魅族等。...
  18. Ukulele 那些花儿
  19. 程序语言Python Tutorial(一):激发你的欲望 程序语言
  20. 如何在自己的网站加入qq在线交谈功能

热门文章

  1. TCP/IP协议模型详解
  2. 2057. [ZLXOI2015]殉国
  3. 推荐一个Android Studio很实用的插件android-butterknife-zelezny
  4. 使用Python管理Azure(1):基础配置
  5. Filter Effects - 使用 CSS3 滤镜处理图片
  6. 例题:学习数据库查询。学生信息表的创建,主外键关系,以及45道题的查询实例。主要知识点在讲页45页,和讲页65页...
  7. IOS7开发~API变化
  8. Oracke nls Parameters
  9. jq实现跳转404跳转,原生js实现跳转404跳转
  10. netapp更换硬盘