无需逆元版本:

#include<cstdio>
#include<cassert>
#include<cmath>
#include<map>
typedef long long ll;
ll gcd(ll a,ll b) {
return b?gcd(b,a%b):a;
}
ll qpow(ll a,ll b,ll p) {
ll ret = 1;
while(b) {
if(b&1) {
ret=ret*a%p;
}
a=a*a%p;
b>>=1;
}
return ret;
}
ll exgcd(ll a,ll b,ll &x,ll &y) {
if(b==0) {
x=1;y=0;
return a;
}
ll d = exgcd(b,a%b,x,y);
ll tmp = x;
x = y;
y=tmp-a/b*y;
return d;
}
inline ll bsgs(ll a,ll b,ll p) {
std::map<ll,ll> M;
if(p==1) return 0;
a%=p;b%=p;
ll d,cnt=0,q=1;
while((d=gcd(a,p))!=1) {
if(b==1) return cnt;
if(b%d) return -1;
b/=d;
p/=d;
++cnt;
q=a/d*q%p;
}
ll lmt = ceil(sqrt(p));
ll tmp = b%p;
for(int i = 0;i<lmt;++i,tmp=tmp*a%p) {
M[tmp]=i;
}
tmp = qpow(a,lmt,p);
for(int i = 1;i<=lmt+1;++i) {
q=q*tmp%p;
if(M.count(q)) {
return i*lmt-M[q]+cnt;
}
}
return -1;
}
int main() {
ll a,b,p;
scanf("%lld%lld%lld",&a,&p,&b);
while(a||b||p) {
ll ans = bsgs(a,b,p);
if(ans==-1) puts("No Solution");
else printf("%lld\n",ans);
scanf("%lld%lld%lld",&a,&p,&b);
}
return 0;
}

【文文殿下】ExBSGS的更多相关文章

  1. 【文文殿下】WC2019游记

    Day0 今天早上三点半才睡着,五点起床,前往省城郑州.与省实验常老师汇合,坐上高铁,下午三点半多才到广州二中. 下午随便找了一个教室进去敲一敲代码,发现自己越来越菜了. 和一大堆网上的dalao面基 ...

  2. 【文文殿下】NOIp2018游记

    Day-1 本段更新于 2018年11月8日23:26:44 今天还在机房里面,无所事事吧.上午睡了一上午,出去理了一下发,花了20块钱 QAQ. 下午来到机房,复习了一下exgcd的东西. 发现自己 ...

  3. 【文文殿下】【CF724C】Ray Tracing (中国剩余定理)

    题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<al ...

  4. [文文殿下]基本的DP技巧

    . 二进制状态压缩动态规划 对于某些情况,如果题目中所给的限制数目比较小,我们可以尝试状态压缩动态规划.例如,题目中给出数据范围\(n<=20\),这个一般情况下是一个状压DP的提示. 状态压缩 ...

  5. 【文文殿下】CF1029F Multicolored Markers

    这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...

  6. 【文文殿下】P3737 [HAOI2014]遥感监测

    题解 显然可以把每个观测点,认为是x轴上的一段区间.问题就转换为了:对于x轴上的若干个区间,选取尽可能少的点,使得所有区间都有至少一个点. 这是一个相当经典的贪心问题. 代码如下: #include& ...

  7. 【文文殿下】P3740 [HAOI2014]贴海报

    题解 一开始想到离散化,然后暴力模拟.但是存在一种hack数据: [5,7] [1,5] [7,9] 这样会错误的认为第一个区间被覆盖了(因为两个端点被覆盖).所以我们设置一个玄学调参系数,在一个区间 ...

  8. 【文文殿下】【洛谷】分治NTT模板

    题解 可以计算每一项对后面几项的贡献,然后考虑后面每一项,发现这是一个卷积,直接暴力NTT就行了,发现它是一个有后效性的,我们选择使用CDQ分治. Tips:不能像通常CDQ分治一样直接 每次递归两边 ...

  9. 【文文殿下】[AH2017/HNOI2017]礼物

    题解 二项式展开,然后暴力FFT就好了.会发现有一个卷积与c无关,我们找一个最小的项就行了. Tips:记得要倍长其中一个数组,防止FFT出锅 代码如下: #include<bits/stdc+ ...

随机推荐

  1. golang实现任务分发处理

    package main import ( "flag" "fmt" "os" "log" "net/http ...

  2. 64bits access

    http://www.codicode.com/art/64_bit_version_of_microsoft_jet.aspx

  3. ip地址后边加个/8(16,24,32)是什么意思

    是掩码的位数,A类IP地址的默认子网掩码为255.0.0.0(由于255相当于二进制的8位1,所以也缩写成“/8”,表示网络号占了8位);B类的为255.255.0.0(/16);C类的为255.25 ...

  4. 国内maven仓库地址

    Maven 中央仓库地址: 1.http://mvnrepository.com/ (推荐) 2.http://mirrors.ibiblio.org/maven2/ 3.http://repo1.m ...

  5. 模板练习(LUOGU)

    1:并查集 P3183食物链 #define man 300050 ; int find(int x){ if(fa[x]==x) return fa[x]; return fa[x]=find(fa ...

  6. [VBScript] 自动删除2小时以前生成的文件

    保存为deleteTempFiles.vbs,双击即可运行 dim folder, file, mFSO, subfolder Set mFSO = CreateObject("Script ...

  7. 使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration

    在连接字符串后面加上?serverTimezone=UTC 其中UTC是统一标准世界时间. 完整的连接字符串示例:jdbc:mysql://localhost:3306/test?serverTime ...

  8. Windows Server 2012如何实现双网卡绑定

    在windows server 2012 之前我们在服务器上如果要实现双网卡绑定则需要向服务器厂家所要相应的软件,但是现在强大的windows server 2012的到来使我们省去了所有的麻烦,因为 ...

  9. 2018.07.06 POJ 1459 Power Network(多源多汇最大流)

    Power Network Time Limit: 2000MS Memory Limit: 32768K Description A power network consists of nodes ...

  10. nginx集群tomcat,session共享问题

    tomcat-redis-session-manager版本: apache-tomcat-8.0.32.nginx-1.13.12.redis_3.2.1 github地址: https://git ...