【文文殿下】ExBSGS
无需逆元版本:
#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的更多相关文章
- 【文文殿下】WC2019游记
Day0 今天早上三点半才睡着,五点起床,前往省城郑州.与省实验常老师汇合,坐上高铁,下午三点半多才到广州二中. 下午随便找了一个教室进去敲一敲代码,发现自己越来越菜了. 和一大堆网上的dalao面基 ...
- 【文文殿下】NOIp2018游记
Day-1 本段更新于 2018年11月8日23:26:44 今天还在机房里面,无所事事吧.上午睡了一上午,出去理了一下发,花了20块钱 QAQ. 下午来到机房,复习了一下exgcd的东西. 发现自己 ...
- 【文文殿下】【CF724C】Ray Tracing (中国剩余定理)
题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<al ...
- [文文殿下]基本的DP技巧
. 二进制状态压缩动态规划 对于某些情况,如果题目中所给的限制数目比较小,我们可以尝试状态压缩动态规划.例如,题目中给出数据范围\(n<=20\),这个一般情况下是一个状压DP的提示. 状态压缩 ...
- 【文文殿下】CF1029F Multicolored Markers
这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...
- 【文文殿下】P3737 [HAOI2014]遥感监测
题解 显然可以把每个观测点,认为是x轴上的一段区间.问题就转换为了:对于x轴上的若干个区间,选取尽可能少的点,使得所有区间都有至少一个点. 这是一个相当经典的贪心问题. 代码如下: #include& ...
- 【文文殿下】P3740 [HAOI2014]贴海报
题解 一开始想到离散化,然后暴力模拟.但是存在一种hack数据: [5,7] [1,5] [7,9] 这样会错误的认为第一个区间被覆盖了(因为两个端点被覆盖).所以我们设置一个玄学调参系数,在一个区间 ...
- 【文文殿下】【洛谷】分治NTT模板
题解 可以计算每一项对后面几项的贡献,然后考虑后面每一项,发现这是一个卷积,直接暴力NTT就行了,发现它是一个有后效性的,我们选择使用CDQ分治. Tips:不能像通常CDQ分治一样直接 每次递归两边 ...
- 【文文殿下】[AH2017/HNOI2017]礼物
题解 二项式展开,然后暴力FFT就好了.会发现有一个卷积与c无关,我们找一个最小的项就行了. Tips:记得要倍长其中一个数组,防止FFT出锅 代码如下: #include<bits/stdc+ ...
随机推荐
- 从输入url到显示网页发生了什么
原文链接:https://juejin.im/post/5bf23afa6fb9a049be5d1494 在浏览器中输入url到显示网页主要包含两个部分: 网络通信和页面渲染 互联网内各网络设备间的通 ...
- linux下xampp(apache)中配置域名访问,以及遇到的问题
xampp中apache使用域名访问 一.首先找到/opt/lampp/etc/httpd.conf: # Virtual hosts Include etc/extra/httpd-vhosts.c ...
- 如何看待阿里 AI 每秒制作 8000 张海报?
看了其他设计老师们的回答,给了我一些启发,于是更新一波. 设计本质上是产品和服务的一部分,如果只站在设计师角度看这问题,免不了会有一种被取代的危机感. 来源:千锋UI 但如果站在整个产品和服务的角度 ...
- Python 函数装饰器简明教程
定义类的静态方法时,就使用了装饰器.其实面向对象中的静态方法都是使用了装饰器. @staticmethod def jump(): print(" 3 meters high") ...
- ejb 和pojo , jboss 和 tomcat
EJB(企业JavaBeans)是普通JavaBeans的一种提升和规范,因为企业信息系统开发中需要一个可伸缩的性能和事务.安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系 ...
- hadoop群集 启动
###注意:严格按照下面的步骤 .5启动zookeeper集群(分别在itcast04.itcast05.itcast06上启动zk) cd /itcast/zookeeper-/bin/ ./zkS ...
- linux 安装 rz sz 快速上传和下载文件
## ubuntu系统 apt install lrzsz
- Linux设置开机启动项
第一种方式:ln -s 建立启动软连接 在Linux中有7种运行级别(可在/etc/inittab文件设置),每种运行级别分别对应着/etc/rc.d/rc[0~6].d这7个目录 Tips:/etc ...
- IntelliJ IDEA 2017版 spring-boot使用JdbcTemplate实例
搭建总框架: (1)在pom.xml加入jdbcTemplate的依赖: (2)编写Dao类,声明为:@Repository,引入JdbcTemplate (3)编写Service类,引入Dao进行使 ...
- 百度地图(icon,zIndex)
百度地图v2.0参考http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a3b2 覆盖物(Marker) Icon: va ...