【模板】exBSGS/Spoj3105 Mod
【模板】exBSGS/Spoj3105 Mod
题目描述
已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\)。
输入输出格式
输入格式:
每个测试文件中最多包含\(100\)组测试数据。
每组数据中,每行包含\(3\)个正整数\(a,p,b\)。
当\(a=p=b=0\)时,表示测试数据读入完全。
输出格式:
对于每组数据,输出一行。
如果无解,输出No Solution(不含引号),否则输出最小自然数解。
BSGS
若\(A \perp p\),那么\(\{A^x,x\le \varphi(p)\}\)遍历的剩余系\(\{A^{kx},x\le \varphi(p)\}\)一定也遍历,于是考虑枚举答案
\]
采用分块的思想,设\(t=\sqrt p,x=kt-b\),式子就变成了
\]
\]
我们枚举\(x=0 \sim t\),然后把得到的\(A^xB\)插到\(\tt{Hash}\)表中去。
然后枚举\((A^t)^k\)的\(k\),查询\(\tt{Hash}\)表中有没有\(A^{kt}\)
exBSGS
如果\(p\)不是质数,存在无解的判定\((\gcd(A,p)\nmid B)\)且\(B\not=1\)(\(B=1\)特判\(x=0\))
然后考虑操作一波式子
\]
把\(d\)除掉
\]
设\(C=\frac{A}{d},B'=\frac{B}{d},p'=\frac{p}{d}\)
原方程变为
\]
然后重复是否无解的判断并向下递归,直到\(A\perp p\)或者无解
然后\(BSGS\)即可,而常数\(C\)并不影响我们进行\(BSGS\)
复杂度?显然递归的深度是\(\log\)的,带上BSGS的就可以了。
Code:
#include <cstdio>
#include <cmath>
#include <unordered_map>
std::unordered_map <int,int> Hash;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
#define mul(a,b,p) (1ll*(a)*(b)%p)
int exbsgs(int A,int B,int p)
{
if(B==1) return 0;
int ct=0,d,k=1;
while((d=gcd(A,p))^1)
{
if(B%d) return -1;
B/=d,p/=d,++ct;
k=mul(k,A/d,p);
if(k==B) return ct;
}
int t=sqrt(p)+1,kt=1;
Hash.clear();
for(int i=0;i<t;i++)
{
Hash[mul(kt,B,p)]=i;
kt=mul(kt,A,p);
}
k=mul(k,kt,p);
for(int i=1;i<=t;i++)
{
if(Hash.find(k)!=Hash.end()) return i*t-Hash[k]+ct;
k=mul(k,kt,p);
}
return -1;
}
int main()
{
int a,p,b;
scanf("%d%d%d",&a,&p,&b);
while(a&&p&&b)
{
int ans=exbsgs(a,b,p);
if(~ans) printf("%d\n",ans);
else puts("No Solution");
scanf("%d%d%d",&a,&p,&b);
}
return 0;
}
2018.12.19
【模板】exBSGS/Spoj3105 Mod的更多相关文章
- P4195 【模板】exBSGS/Spoj3105 Mod
传送门 首先要懂得 $BSGS$,$BSGS$ 可以求出关于 $Y$ 的方程 $X^Y \equiv Z (mod\ mo)$ 的最小解,其中 $gcd(X,Z)=1$ $exBSGS$ 算是 $BS ...
- 【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod EXBSGS
[BZOJ1467/2480]Pku3243 clever Y/Spoj3105 Mod Description 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. Input ...
- 【bzoj2480】Spoj3105 Mod
2480: Spoj3105 Mod Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 557 Solved: 210[Submit][Status][ ...
- BSGS 扩展大步小步法解决离散对数问题 (BZOJ 3239: Discrete Logging// 2480: Spoj3105 Mod)
我先转为敬? orz% miskcoo 贴板子 BZOJ 3239: Discrete Logging//2480: Spoj3105 Mod(两道题输入不同,我这里只贴了3239的代码) CODE ...
- spoj3105 MOD - Power Modulo Inverted(exbsgs)
传送门 关于exbsgs是个什么东东可以去看看yyb大佬的博客->这里 //minamoto #include<iostream> #include<cstdio> #i ...
- BZOJ2480 Spoj3105 Mod 数论 扩展BSGS
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2480.html 题目传送门 - BZOJ2480 题意 已知数 $a,p,b$ ,求满足 $a^x≡b ...
- 模板BSGS(SDOI2011计算器) 模板EXBSGS
BSGS和EXBSGS是OI中用于解决A^xΞB(mod C)的常用算法. 1.BSGS BSGS用于A,C互质的情况. 令m=sqrt(C),此时x可表示为i*m+j. 式中i和j都<=sqr ...
- [luogu4195 Spoj3105] Mod (大步小步)
传送门 题目描述 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. 输入输出格式 输入格式: 每个测试文件中最多包含100组测试数据. 每组数据中,每行包含3个正整数a,p,b. 当a ...
- BZOJ2480 Spoj3105 Mod
乍一看题面:$$a^x \equiv b \ (mod \ m)$$ 是一道BSGS,但是很可惜$m$不是质数,而且$(m, a) \not= 1$,这个叫扩展BSGS[额...... 于是我们需要通 ...
随机推荐
- node安装和npm全局配置
本文章环境 windows10 64位家庭版 Node10.15.3LTS 安装包下载 Node官网 安装node 点击安装文件, 一键安装, 注意安装位置和添加到环境变量(xx to PATH)选项 ...
- 电梯调度 结对项目开发(郭林林&胡潇丹)
(一)需求分析: 上升,下降,开门,关门: 超过负载以后发出警报,下去乘客: 电梯出现故障后,电梯停止: 电梯楼层的输入框可以同时指定所要到的楼层,也是楼层的显示框: 电梯同时记录多个状态,即为到达多 ...
- 第七章 用户输入和while循环
7.1函数input()的工作原理 函数默认输入为字符串string,如果需使用数字,需用int进行类型转换 7.2 while循环 while是根据条件的真假判断是否进入执行 使用标志: 使用bre ...
- ubuntu 相关软件设置
软件篇 1. 网易云音乐软件 首先去官网下载网易云音乐客户端linux版,网址:http://music.163.com/#/download,选择linux版本,然后选择ubuntu 16.04(6 ...
- nginx中location详解
Location block 的基本语法形式是: location [=|~|~*|^~|@] pattern { ... } [=|~|~*|^~|@] 被称作 location modifier ...
- Spring自定义标签解析与实现
在Spring Bean注册解析(一)和Spring Bean注册解析(二)中我们讲到,Spring在解析xml文件中的标签的时候会区分当前的标签是四种基本标签(import.alias ...
- “Hello World!“”团队第七周召开的第三次会议
今天是我们团队“Hello World!”团队第七周召开的第三次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.代码 一 ...
- No.101_第二次团队会议
时间的敲定 在这一次的会议中,明确了任务目标,将任务进行合理分配,并且规划了整个任务的时间节点,这对团队来说非常重要. 一.最终项目 在上一节课的时候,我们最终没有拿到学霸开发项目,最后爬虫也被选走了 ...
- 20172321 20172333 2017-2018 暑假作业APP
20172321 20172333 2017-2018 暑假作业APP 项目介绍 项目成员 吴恒佚 20172321 严域俊 20172333 项目简介 从理论上来说,这是一个贪吃蛇游戏. <贪 ...
- iOS开发学习-如何优化tableview的使用
1.复用单元格 2.单元格中的视图尽量都使用不透明的,单元格中尽量少使用动画 3.图片加载使用异步加载 4.滑动时不加载图片,停止滑动时开始加载 5.单元格中的内容可以在自定义cell类中的drawR ...