Ex-BSGS
给定\(a,p,b\),求\(a^x\equiv b \pmod p\)的最小自然数\(x\) .
保证\(\sum \sqrt p \leq5\times 10^6\)
当\(a=p=b=0\)时,表示输入数据完成。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long LL;
const int Hsh=10007;
LL ans,a,p,b,flg[Hsh+5];
vector<pair<LL,int> > V[Hsh+5];
LL Gcd(LL a,LL b){
if(a%b==0) return b;
return Gcd(b,a%b);
}
LL exbsgs(){
memset(flg,0,sizeof(flg));
if(!p) return -1;
if(p==1){
if(!b) return 0;
return -1;
}
if(b==1) return 0;
a%=p;b%=p;
LL g=1,cnt=0,tmpb=1;
while ((g=Gcd(a,p))>1){
if(tmpb%p==b%p) return cnt;
if(b%g) return -1;
b/=g;p/=g;
tmpb=tmpb*(a/g)%p;
cnt++;
}
LL m=ceil(sqrt(double(p)));
LL tmp=1,tmpid=0;
for(int i=1;i<=m;i++){
tmp=tmp*a%p;
tmpid=(tmp*b%p)%Hsh;
if(!flg[tmpid]){
V[tmpid].clear();
flg[tmpid]=1;
}
V[tmpid].push_back(make_pair(tmp*b%p,i));
}
LL res=tmpb%p,tmpres=1;
for(int i=1;i<=m;i++){
res=res*tmp%p;
tmpres=res%Hsh;
if(flg[tmpres]){
for(int j=V[tmpres].size()-1;j>=0;j--){
if(V[tmpres][j].first==res) return (i*m-V[tmpres][j].second)+cnt;
}
}
}
return -1;
}
int main(){
while (scanf("%lld%lld%lld",&a,&p,&b)&&(a|p|b)!=0){
ans=exbsgs();
if(ans==-1) puts("No Solution");
else printf("%lld\n",ans);
}
return 0;
}
Ex-BSGS的更多相关文章
- 【POJ 3243】Clever Y 拓展BSGS
调了一周,我真制杖,,, 各种初始化没有设为1,,,我当时到底在想什么??? 拓展BSGS,这是zky学长讲课的课件截屏: 是不是简单易懂.PS:聪哥说“拓展BSGS是偏题,省选不会考,信我没错”,那 ...
- 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法
BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...
- 【BZOJ-3122】随机数生成器 BSGS
3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1362 Solved: 531[Submit][Sta ...
- BSGS[bzoj2242][bzoj3122]
数论题. 操作一:直接快速幂就好了. 操作二:我用了exgcd,shy和lyz都喜欢欧拉函数...QAQ最后这块还写错了. 对于ax+by=gcd(a,b)的形式,我们可以把他们变成y'x+p'y=1 ...
- 【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS
Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...
- BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...
- bzoj 1467: Pku3243 clever Y 扩展BSGS
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...
- BSGS模版 a^x=b ( mod c)
kuangbin的BSGS: c为素数: #define MOD 76543 int hs[MOD],head[MOD],next[MOD],id[MOD],top; void insert(int ...
- bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...
- 【poj3358】消因子+BSGS 或 消因子+欧拉定理 两种方法
题意:给你一个分数,求它在二进制下的循环节的长度,还有第一个循环节从哪一位开始. For example, x = 1/10 = 0.0001100110011(00110011)w and 0001 ...
随机推荐
- 在docker容器中创建用户组和用户,并且多用户共用一个anaconda环境
背景: 实验室可以使用一个浪潮的AI计算平台,该平台运行的都是docker容器,并且不能联网,因此谁要是想要安装什么软件的话就需要自己单独打包镜像到平台上,大致步骤为: 1. 在平台的镜像管理中找 ...
- fastDFS安装时,./make.sh编译时出错找不到./make.sh: line 99: perl: command not found
1.背景 报错如下: 2.解决方案 执行命令: yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-d ...
- PyTorch的TensorBoard用法示例
原文: https://www.emperinter.info/2020/07/30/tensorboard-in-pytorch/ 缘由 自己上次安装好PyTorch以及训练了一下官方的数据,今天看 ...
- Apache DolphinScheduler 如何实现自动化打包+单机/集群部署?
Apache DolphinScheduler 是一款开源的分布式任务调度系统,旨在帮助用户实现复杂任务的自动化调度和管理.DolphinScheduler 支持多种任务类型,可以在单机或集群环境下运 ...
- 2023 ICPC网络赛第一场(A,D,J,L)
2023 ICPC网络赛第一场(A,D,J,L) A Qualifiers Ranking Rules 先把两场比赛的学校排名处理出来,然后两场比赛的同位次进行合并即可 #include <bi ...
- springcloud线上发布超时方案之终极杀招:预热(测试用例)
springcloud线上发布超时系列文章: springcloud线上发布超时之feign(ribbon饥饿加载) springcloud线上发布超时之grpc springcloud线上发布超时方 ...
- element-ui 表格控制列显隐简单方案
核心是使用v-if控制列的显隐 <template> <div> <div v-for="(item, index) in tables" :key= ...
- Android 存储概览
存储区 Android 一开始就将存储区分为内部存储和外部存储,对应手机自带的存储和可插拔的 sd 卡(可类比于 PC 的硬盘和 U盘). 内部存储容量有限,Google 建议 App 数据尽量存储 ...
- Java 读取 IP 地址
使用 InetAddress 类 可以利用 Java 自带的 InetAddress 类来检查一个字符串是否为有效的 IP 地址: import java.net.InetAddress; // 导入 ...
- web前端常用的五种方式搭建本地静态html页面服务器
方式一:live-server live-server是一款npm工具,可以在项目目录启动一个node服务,然后直接在浏览器中预览,并且自动全局监听实时更新. 两种安装方式: 全局安装 npm i l ...