P4195 【模板】exBSGS/Spoj3105 Mod
首先要懂得 $BSGS$,$BSGS$ 可以求出关于 $Y$ 的方程 $X^Y \equiv Z (mod\ mo)$ 的最小解,其中 $gcd(X,Z)=1$
$exBSGS$ 算是 $BSGS$ 的进一步扩展,使得当 $gcd(X,Z)!=1$ 时仍然适用
先把方程转换成 $X^Y+k*mo=Z$ 的形式
因为 $Y,k$ 都是整数,所以 $Z$ 必须是 $gcd(X,mo)$ 的倍数,不然无解
所以可以把方程左右同除 $gcd(X,mo)$,变成 $X^{(Y-1)}*\frac{X}{gcd(X,mo)}+k*\frac{mo}{gcd(X,mo)}=\frac{Z}{gcd(X,mo)}$
其实这个方程就相当于 $\frac{X}{gcd(X,mo)}*X^{(Y-1)} \equiv \frac{Z}{gcd(X,mo)} (mod\ \frac{mo}{gcd(X,mo)})$
发现 $\frac{X}{gcd(X,mo)}$ 只是一个系数,如果此时 $gcd(X,\frac{mo}{gcd(X,mo)})=1$ 则可以直接套用 $BSGS$ 求解
如果此时 $gcd(X,\frac{mo}{gcd(X,mo)})!=1$ 则可以继续上述操作直到 $gcd$ 为 $1$
设第 $i$ 次操作的 $gcd$ 为 $d_i$,总共进行了 $T$ 次操作
则最后式子的形式为 $\frac{X^T}{\prod _{i=1}^{T}d_i}X^{Y-T} \equiv \frac{Z}{\prod _{i=1}^{T}d_i}\ \ (mod\ \frac{mo}{\prod _{i=1}^{T}d_i})$
要记得特判 $Y \in [0,T]$ 的情况
具体看代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
typedef long double ldb;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
int gcd(int a,int b) { return b ? gcd(b,a%b) : a; }
map <int,int> mp;
inline int ksm(int x,int y,int mo)
{
int res=;
while(y)
{
if(y&) res=1ll*res*x%mo;
x=1ll*x*x%mo; y>>=;
}
return res;
}
// X^Y=Z (mod mo)
void exBSGS(int X,int Z,int mo)
{
if(Z==) { printf("0\n"); return; }
int d=gcd(X,mo),t=,k=;
while(d!=)
{
if(Z%d) { printf("No Solution\n"); return; }
t++; k=(1ll*k*(X/d))%mo; mo/=d; Z/=d;
if(k==Z) { printf("%d\n",t); return; }
d=gcd(X,mo);
}
int m=sqrt(mo)+; mp.clear();
for(int b=,s=Z; b<m; b++,s=1ll*s*X%mo) mp[s]=b;
for(int a=,p=ksm(X,m,mo),s=1ll*k*p%mo; a<=m+; a++,s=1ll*s*p%mo)
{
if(mp.find(s)==mp.end()) continue;
printf("%d\n",a*m-mp[s]+t); return;
}
printf("No Solution\n");
}
int main()
{
int X=read(),mo=read(),Z=read();
while(X||Z||mo)
{
exBSGS(X,Z,mo);
X=read(),mo=read(),Z=read();
}
return ;
}
P4195 【模板】exBSGS/Spoj3105 Mod的更多相关文章
- 【模板】exBSGS/Spoj3105 Mod
[模板]exBSGS/Spoj3105 Mod 题目描述 已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\). 输入输出格式 输入格式: 每个测试文件 ...
- 【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 ...
- LUOGU P4195 Spoj3105 Mod
题面 bsgs问题.因为p可能不为质数,所以我们将原先解题的式子变形 每次除以p与a的最大公约数,直到最大公约数为1或b不能整除为止 代码 #include<iostream> #incl ...
- 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 ...
随机推荐
- Elasticsearch Java Low Level REST Client(嗅探器)
https://segmentfault.com/a/1190000016828977?utm_source=tag-newest#articleHeader0 嗅探器 允许从正在运行的Elastic ...
- Maven中添加Jetty服务器配置
<project> <!--其它配置--> <build> <plugins> <plugin> <groupId>org.mo ...
- 07http基础
1.http协议 1.1 概念 是对浏览器和服务器端数据传输格式的规范! 1.2 http协议内容 请求 GET /bbs/hello HTTP/1.1 # 请求行 Host: localhost:8 ...
- Vue自定义指令实现input限制输入正整数
directive.js import Vue from 'vue' export default () => { Vue.directive('Int', { inserted: functi ...
- Flutter-網絡請求
Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient.第三方网络请求 http以及 Flutter 中的 Dio.我们可以比 ...
- 免插件,简单实现上拉加载loading
上拉加载是前端经常遇到的问题,采用插件往往能够轻松解决,这里介绍一种免插件简单实现上拉加载的方法,参考一下,下面分享一下代码. html <body> <ul> <li& ...
- Ubuntu下批量使用Tecplot的preplot命令对数据进行处理
首先把.PLT文件后缀批量修改为.dat rename 's/.PLT$/.dat/' *.PLT 对所有.dat文件批量执行preplot find ./ -name "*.dat&quo ...
- hdu 2815 : Mod Tree 【扩展BSGS】
题目链接 直接用模板好了.实在不行,反正有队友啊~~~~ #include<bits/stdc++.h> using namespace std; typedef long long LL ...
- 021:自定义path(或url)转换器
1.实现如下需求:用户可以根据articles/list/方式获取文章,其中文章分类是采用如下分类,实例如下: 第一种:获取python分类下的文章:/article/python/ 第二种:获取py ...
- python+selenium+pytest+html报告
背景:python+selenium+pytest+html报告 环境:我的是本机的Jenkins配置本机的代码 前提:要下载好HTML Publisher plugin插件[系统管理>管理插件 ...