exBSGS板子
/*bzoj2480*/
#include <map>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long LL;
std::map<LL,LL> mmp;
inline LL Pow(LL x,LL y,LL P){
LL ret=;
while(y){
if(y&)ret=ret*x%P;
x=x*x%P,y>>=;
}
return ret;
}
inline LL gcd(LL x,LL y){
return x==?y:gcd(y%x,x);
}
inline LL BSGS(LL A,LL B,LL C,LL D){
int len=ceil(sqrt(C+0.5));
LL temp=B,sum=D;
mmp.clear();
for(int i=;i<=len;++i)mmp[temp=temp*A%C]=i;
temp=Pow(A,len,C);
for(int i=;i<=len;++i){
sum=sum*temp%C;
if(mmp.count(sum))return i*len-mmp[sum];
}
return -;
}
inline LL exBSGS(LL A,LL B,LL C){
/*A>=0(这里涉及到0^0是否有意义(是否为1),我们假设他是1好了) B>=0 C>0(%0和/0是一个效果啊)*/
/*假设我们求的解是最小自然数(无解输出-1)*/
if(C==)return ;
A%=C,B%=C;
if(B==)return ;
/*判掉了解为0的情况*/
if(A==){
if(B==)return ;
return -;
}
/*现在A>0 B>=0 B!=1 C>1*/
LL D=;int cnt=;
for(LL g=gcd(A,C);g!=;g=gcd(A,C)){
if(B%g!=)return -;
C/=g,B/=g,D=D*(A/g)%C,++cnt;
if(D==B)return cnt;
}
/*得到的C一定不为1*/
A%=C;
/*现在我们得到了A的cnt次方与C除去gcd后的结果(分别是D和C),并且现在A与C互质了*/
LL ret=BSGS(A,B,C,D);
return ret==-?-:ret+cnt;
}
int main(){
LL a,p,b,ans;
while(true){
scanf("%lld%lld%lld",&a,&p,&b);
if(p==)return ;
ans=exBSGS(a,b,p);
if(ans==-)puts("No Solution");
else printf("%lld\n",ans);
}
}
exBSGS板子的更多相关文章
- MOD - Power Modulo Inverted(SPOJ3105) + Clever Y(POJ3243) + Hard Equation (Gym 101853G ) + EXBSGS
思路: 前两题题面相同,代码也相同,就只贴一题的题面了.这三题的意思都是求A^X==B(mod P),P可以不是素数,EXBSGS板子题. SPOJ3105题目链接:https://www.spoj. ...
- 省选算法学习-BSGS与exBSGS与二次剩余
前置知识 扩展欧几里得,快速幂 都是很基础的东西 扩展欧几里得 说实话这个东西我学了好几遍都没有懂,最近终于搞明白,可以考场现推了,故放到这里来加深印象 翡蜀定理 方程$ax+by=gcd(a,b)$ ...
- [板子]最小费用最大流(Dijkstra增广)
最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...
- [板子]ISAP
ISAP求最大流,敲了一发板子,无压行,教程略去.转载请随意. #include <cstdio> #include <cstring> #include <algori ...
- [板子]倍增LCA
倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...
- UP Board 人若有大胆,板子就很惨:首次上电开机失败
前言 原创文章,转载引用务必注明链接. 注意:拍照自带抖动功能,画质大家凑合着看.冬日天气干燥,手触摸板子前建议流水洗手或者握持大体积导电体将静电放走. 本文使用Markdown写成,为获得更好的阅读 ...
- orpsocv2 从ROM(bootrom)启动分析--以atlys板子的启动为例子
1 复位后的启动地址 1) 复位后,启动地址在or1200_defines.v最后宏定义,atlys板子的目录:orpsocv2\boards\xilinx\atlys\rtl\verilog\inc ...
- Lattice FPGA 板子 调试笔记
最近在调试LATTICE FPGA 做的视频板子,颇不顺利,所以记录下来作为以后的参考: 1.FPGA的IO口不是所有的都是双向的,有些有特殊作用的是单向的. 在查阅 LatticeECP3-17E ...
- 【图像处理】【SEED-VPM】1.板子基本操作流程
>>>>>>>>>>>>>>>>>>>>>>>>> ...
随机推荐
- Vs2015 遇到 CL:fatal error c1510 cannot load language clui.dll
网上说什么点击修复VS,修改VS的,经验证都不好使,直接下载这个库,放在system32/64下面皆可以了
- 180611-Spring之RedisTemplate配置与使用
logo 文章链接:https://liuyueyi.github.io/hexblog/2018/06/11/180611-Spring之RedisTemplate配置与使用/ Spring ...
- 制作一个App的完整流程是哪些
APP开发流程其实并不复杂,但是对于客户来说,.一般移动APP开发都离不开UI设计师.前端开发.后端开发.测试专员.产品经理等,由于他们的工作性质都不一样,我们且先把APP软件开发项目分为三个阶段: ...
- 巧用浏览器F12调试器定位系统前后端bug
做测试的小伙伴可能用过httpwatch,firebug,fiddler,charles等抓包(数据包)工具,但实际上除了这些还有一个简单实用并的抓包工具,那就是浏览器的F12调试器. httpwat ...
- APP功能性测试-2
安装与卸载 应用是否可以在不同的安卓版本上安装(过低不能适配) 安装后是否可以正常运行 安装空间不足时是否有相应提示 如果应用需要通过网络验证之类的安装,需要测试一下断网情况下是否有相应提示 安装过程 ...
- 进度条加载与案例优化对比——python使用perf_count方法实现
本章我们将讨论python3 perf_counter()的用法及它的实际应用我从中选取两个python基于rquests库的爬虫实例代码源文件进行举例 Python3 perf_counter() ...
- lintcode 466. 链表节点计数
466. 链表节点计数 计算链表中有多少个节点. 样例 给出 1->3->5, 返回 3. /** * Definition of ListNode * class ListNode ...
- CSP201509-2:日期计算
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- Jquery复选框
Jquery复选框 1.checkbox list选择 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- 小茜(xi)的减肥之路
Description 今天,多年未见的小钧和小江在街头偶遇,小江想看看当年那个蠢蠢的小钧有没有变聪明一些,他灵机一动,说:“当初小茜立了个flag,说一定要减肥,她想着第一天跑一米,第二天跑两米,第 ...