如果a和p互质,用扩欧求逆元就可以直接套用普通BSGS。考虑怎么将其化至这种情况。

  注意到当x>=logp时gcd(ax,p)是一个定值,因为这样的话每个存在于a中的质因子,其在ax中的出现次数一定比在p中的多。

  于是对x<logp的情况暴力验证。对x>=logp的情况,设d=gcd(ax,p),剩下的问题变为求ax/d≡b/d(mod p/d),这里ax和p/d显然就是互质的了。

  要求解这个方程,显然不能把d直接乘过去(好像也说不清为啥)。首先b%d>0时无解。然后考虑从ax中分离一部分,使该部分能整除d,再将该部分除以d后移到式子右边。直接分离的话会爆long long,每次分离一个a即可。剩下的就是普通BSGS了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
#define ll long long
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int a,p,b;
map<int,int> f;
void exgcd(int a,int b,int &x,int &y)
{
if (b==)
{
x=,y=;
return;
}
exgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*x;
}
int inv(int a)
{
int x,y;exgcd(a,p,x,y);
x=(x%p+p)%p;
return x;
}
int BSGS(int a,int b,int p)
{
int block=sqrt(p),t=;//cout<<a<<' '<<b<<' '<<p<<endl;
f.clear();
for (int i=;i<block;i++)
{
if (f.find(t)==f.end()) f[t]=i;
if (t==b) return i;
t=1ll*t*a%p;
}
int v=t;
for (int i=;i<=(p-)/block;i++)
{
if (f.find(1ll*b*inv(t)%p)!=f.end()) return i*block+f[1ll*b*inv(t)%p];
t=1ll*t*v%p;
}
return -;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("exbsgs.in","r",stdin);
freopen("exbsgs.out","w",stdout);
#endif
a=read(),p=read(),b=read();
while (a)
{
if (p==) printf(b==?"0\n":"No Solution\n");
else if (b==) printf("0\n");
else
{
int t=,ans=;
for (int i=;i<=;i++)
{
t=1ll*t*a%p;
if (t==b) {ans=i;break;}
}
if (!ans)
{
int u=gcd(p,t);
if (b%u==)
{
//a^x/u=b/u (%p/u)
int P=p;b/=u;p/=u;
for (int i=;i<=;i++)
if (P==p) {ans=i-;break;}
else
{
int u=gcd(a,P);
b=1ll*b*inv(a/u)%p;
P/=u;
}
ans+=BSGS(a,b,p);ans=max(ans,);
}
}
if (ans) printf("%d\n",ans);
else printf("No Solution\n");
}
a=read(),p=read(),b=read();
}
return ;
}

Luogu4195 【模板】exBSGS(exBSGS)的更多相关文章

  1. 【模板】exBSGS/Spoj3105 Mod

    [模板]exBSGS/Spoj3105 Mod 题目描述 已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\). 输入输出格式 输入格式: 每个测试文件 ...

  2. LG4195 【模板】exBSGS

    exBSGS 已知数\(a,p,b\),求满足\(a^x≡b\ (\bmod p)\)的最小自然数\(x\). \(100\%\)的数据,\(a,p,b≤10^9\). _皎月半洒花的题解 其实本质上 ...

  3. P4195 【模板】exBSGS/Spoj3105 Mod

    传送门 首先要懂得 $BSGS$,$BSGS$ 可以求出关于 $Y$ 的方程 $X^Y \equiv Z (mod\ mo)$ 的最小解,其中 $gcd(X,Z)=1$ $exBSGS$ 算是 $BS ...

  4. 算法笔记--BSGS && exBSGS 模板

    https://www.cnblogs.com/sdzwyq/p/9900650.html 模板: unordered_map<int, int> mp; LL q_pow(LL n, L ...

  5. 模板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 ...

  6. BSGS和EXBSGS

    也许更好的阅读体验 \(Description\) 给定\(a,b,p\),求一个\(x\)使其满足\(a^x\equiv b\ \left(mod\ p\right)\) \(BSGS\) \(BS ...

  7. BSGS及其扩展

    目录 定义 原理 朴素算法 数论分块 例题 Luogu2485 [SDOI2011]计算器 题解 代码 扩展 例题 Luogu4195 [模板]exBSGS/Spoj3105 Mod 代码 之前写了一 ...

  8. 数论ex

    数论ex 数学学得太差了补补知识点or复习 Miller-Rabin 和 Pollard Rho Miller-Rabin 前置知识: 费马小定理 \[ a^{p-1}\equiv 1\pmod p, ...

  9. BSGS算法及其扩展

    bsgs算法: 我们在逆元里曾经讲到过如何用殴几里得求一个同余方程的整数解.而\(bsgs\)就是用来求一个指数同余方程的最小整数解的:也就是对于\(a^x\equiv b \mod p\) 我们可以 ...

随机推荐

  1. Android学习之adb异常处理

    错误信息: eclipse运行Android程序时,报以下错误: The connection to adb is down, and a severe error has occured. You ...

  2. [01-01] 示例:用Java爬取新闻

    1.分析url <空港双流>数字报刊,访问地址为:http://epaper.slnews.net.cn,现在为了抓取每篇新闻的网页内容. 在浏览器访问该链接后,发现链接出现了变化,看样子 ...

  3. Luogu P1494 [国家集训队]小Z的袜子

    比较简单的莫队题,主要是为了熟练板子. 先考虑固定区间时我们怎么计算,假设区间\([l,r]\)内颜色为\(i\)的袜子有\(cnt_i\)只,那么对于颜色\(i\)来说,凑齐一双的情况个数为: \( ...

  4. Luogu P4211 [LNOI2014]LCA

    我去这道题的Luogu评级是假的吧,这都算黑题. 我们首先考虑把操作离线不强制在线的题目离线一下一般都要方便些 考虑差分,我们用\(f(x)\)表示\([1,x]\)之间的点与\(z\)的答案,那么显 ...

  5. A2dp初始化流程源码分析

    蓝牙启动的时候,会涉及到各个profile 的启动.这篇文章分析一下,蓝牙中a2dp profile的初始化流程. 我们从AdapterState.java中对于USER_TURN_ON 消息的处理说 ...

  6. 使用requests库提交multipart/form-data 格式的请求

    前言: Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库.它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求 ...

  7. UPC-5063-二分图最大匹配

    好吧二分图的最小点覆盖=最大匹配 这道题也就变成模板题了... 写一个提醒,在写二分图时,尽量清零操作清空为-1,比如这个题,匹配数组girl[]如果清空为0,代表每个点都与0点连接,但是实际上是并没 ...

  8. pair work 附加题解法(张艺 杨伊)

    1.改进电梯调度的interface 设计, 让它更好地反映现实, 更能让学生练习算法, 更好地实现信息隐藏和信息共享,目前的设计有什么缺点, 你会如何改进它? 目前的缺点: (1)电梯由于载客重量不 ...

  9. 2017-2018-2 1723《程序设计与数据结构》第九周作业 & 第二周结对编程 总结

    作业地址 第九次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1878 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

  10. 实现基于SSH的门票管理系统开发的质量属性

    我要做的是一个基于SSH的门票售卖系统,在系统中常见的质量属性有:可用性.可修改性.性能.安全性.易用性. 可用性方面: 可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况 ...