【数学 BSGS】bzoj2242: [SDOI2011]计算器
数论的板子集合……
Description
Input
输入包含多组数据。
Output
题目分析
第一个问题:快速幂解决
第二个问题:1.转为exgcd问题 2.直接$x=Z*y^{-1}$
第三个问题:BSGS
BSGS是引入分块的思想解决形如$A^x≡B(mod\,C) C为素数$的问题(至于C不是素数就是exBSGS的范畴了)
具体来说,就是记$size=\sqrt C$,$x=i*size-j \, (0≤j<\sqrt C)$,于是式子就成了$A^{i*size}≡A^j*B$的形式。而右边这个东西是可以预处理出来放在hash表里的,这样在$\sqrt C$枚举$i$的过程中,就可以$O(1)/O(log \, n)$判断是否有相应的j了。
这类思想挺妙的,应该可以迁移到其他地方。
#include<bits/stdc++.h>
typedef long long ll; int T,k;
ll x,y,p,w,z,d,cir;
std::map<ll, int> mp; ll qmi(ll a, ll b)
{
ll ret = ;
for (a%=p; b; b>>=, a=a*a%p)
if (b&) ret = ret*a%p;
return ret;
}
ll gcd(ll a, ll b){return !b?a:gcd(b, a%b);}
void exgcd(ll a, ll b, ll &x, ll &y)
{
if (!b){
x = , y = ;
return;
}
exgcd(b, a%b, y, x), y -= a/b*x;
}
ll BSGS(ll a, ll b, ll p)
{
if (((!b)&&(!a))) return ;
if ((!a)&&b) return -;
if (b==) return ;
ll size = ceil(sqrt(p)), bse = ;
mp.clear();
for (int i=; i<size; i++)
{
mp[bse*b%p] = i;
bse = bse*a%p;
}
for (ll i=, now=; i<=p; i+=size, now = now*bse%p)
if (mp.count(now)) return ((i-mp[now])%p+p)%p;
return -;
}
int main()
{
for (scanf("%d%d",&T,&k); T; --T)
{
scanf("%lld%lld%lld",&x,&y,&p);
if (k==) printf("%lld\n",qmi(x, y));
if (k==){
x %= p, y %= p;
if (!x) puts("Orz, I cannot find x!");
else printf("%lld\n",y*qmi(x, p-)%p);
}
if (k==){
x %= p, y %= p, d = BSGS(x, y, p);
if (d==-) puts("Orz, I cannot find x!");
else printf("%lld\n",d);
}
}
return ;
}
END
【数学 BSGS】bzoj2242: [SDOI2011]计算器的更多相关文章
- BZOJ2242 [SDOI2011]计算器 【BSGS】
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 4741 Solved: 1796 [Submit][Sta ...
- [bzoj2242][Sdoi2011]计算器_exgcd_BSGS
计算器 bzoj-2242 Sdoi-2011 题目大意:裸题,支持快速幂.扩展gcd.拔山盖世 注释:所有数据保证int,10组数据. 想法:裸题,就是注意一下exgcd别敲错... ... 最后, ...
- BZOJ2242[SDOI2011]计算器——exgcd+BSGS
题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p, ...
- bzoj2242: [SDOI2011]计算器 BSGS+exgcd
你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值:(快速幂) 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数:(exgcd) 3.给 ...
- bzoj2242: [SDOI2011]计算器 && BSGS 算法
BSGS算法 给定y.z.p,计算满足yx mod p=z的最小非负整数x.p为质数(没法写数学公式,以下内容用心去感受吧) 设 x = i*m + j. 则 y^(j)≡z∗y^(-i*m)) (m ...
- 【数论】【快速幂】【扩展欧几里得】【BSGS算法】bzoj2242 [SDOI2011]计算器
说是BSGS……但是跟前面那题的扩展BSGS其实是一样的……因为模数虽然是质数,但是其可能可以整除a!!所以这两者其实是一样的…… 第一二种操作不赘述. #include<cstdio> ...
- bzoj2242 [SDOI2011]计算器——BSGS
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一次写BSGS,参考了好多好多博客: 然而看到的讲解和模板是一种写法,这道题的网上题 ...
- BZOJ2242 [SDOI2011]计算器
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)
传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...
随机推荐
- visdom可视化pytorch训练过程
一.前言 在深度学习模型训练的过程中,常常需要实时监听并可视化一些数据,如损失值loss,正确率acc等.在Tensorflow中,最常使用的工具非Tensorboard莫属:在Pytorch中,也有 ...
- RobotFramework学习笔记-Web自动化
一.窗口关键字使用 1.当前浏览器弹出新的窗口 使用Select Window和Close Window处理弹出窗口.实际使用中Select Window不一定会一次选中,通常会结合Wait Unti ...
- $SCOJ4427 Miss Zhao's Graph$
\(problem\) 给定一个包含n个顶点m条边的带权有向图,找一条边数最多的路径,且路径上的边的权值严格递增. 图中可能有重边和自环. \(题意非常简单:n个点 m个带权边 最多能连成多少条边\) ...
- HTTP2 Sampler for JMeter
今天开发大大说能不能帮忙压一下HTTP2的链接,便去查了一下相关的东西. HTTP 2.0 的出现,相比于 HTTP 1.x ,大幅度的提升了 web 性能.在与 HTTP/1.1 完全语义兼容的基础 ...
- Node.js 第三方包的安装、升级、卸载,以及包依赖管理
本地安装: npm install package-name 全局全装: npm install -g package-name 举个栗子 全局安装 React项目的脚手架 npm install ...
- [TCP/IP]OSI七层模型和TCP/IP四层模型
OSI參考模型 在過去的電腦網路上,由於資料通訊系統涉及複雜的軟硬體,可是又沒有統一的標準,導致通訊軟體不僅龐大複雜,而且不易測式.修改或分享.為此,ISO(國際標準組織)發展出一套OSI參考模型(O ...
- bzoj3811 uoj36 玛里苟斯
做题前问了一下miaom,得到了一个奇怪的回答 mmp 这题分类讨论 k=1sb题 k=2按位计算,把每个数看成几个2的幂次的和,按位跑期望 k>2线性基sb题 没了 #include<i ...
- Hive进阶_开发Hive的自定义函数
Hive中的自定义函数简介 (1) 在类中创建自定义函数.自定义UDF需要继承'org.apache.hadoop.hive.ql.exec.UDF',实现evaluate函数,evaluate函数支 ...
- 爬虫(BeautifulSoup4)——安装
环境:python3 win10 安装这个心好累啊!网上找了很多办法都安装不成功,后来换了几个安装包,最后4.4.1版本的包终于能用了! https://blog.csdn.net/www520507 ...
- js和jq中常见的各种位置距离之offset()和position()的区别(二)
offset()返回的是相对于当前文档的坐标,position()返回的是相对于其定位的祖辈元素的坐标. 使用position()方法时事实上是把该元素当绝对定位来处理,获取的是该元素相当于最近的一个 ...