浅谈BSGS
用于求解形如\(a^x≡b\mod p\)的最小非负整数解\(x\).
由欧拉定理\(a^{\phi(p)}≡1\mod p\)可以知道,我们找的解如果有解则一定在\(\phi(p)\)范围内,而最大的范围就是当\(p\)为质数时,等于\(p-1\).
一种暴力方法是枚举指数验证。由于\(gcd(a,p)=1\).则\(a\)在\(\mod p\)意义下必有逆元。所以,我们考虑分解一下质数的表示形式。
知道最大范围不超过\(p\),所以我们令\(x=i*m-j\),将\(a^{-j}\)移项到左边,变成\(a^{i*m}≡b*a^j\mod p\).这里\(m=\lceil{\sqrt{p}}\rceil\).
我们枚举\(b*a^j\),把它们\(\mod p\)的值插入到\(\text{Hash}\)表里面。我们再枚举\(a^{i*m}\),如果这个值在\(\text{Hash}\)表里面出现过,则跳出循环,输出答案。
特判无解,一是没有找到解,另一个是无解,即\(a\mod p=0,b!=0\),或是\(a=0\)的时候。(就那几个特殊情况)
这就是\(BSGS\)的基本思路。下面是\(\text{fast_power,Exgcd,BSGS}\)的三合一模板。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
int mul(int a,int b,int p){return (1ll*a*b)%p;}
int add(int a,int b,int p){return (1ll*a+b)%p;}
int qpow(int a,int b,int p){
int res=1;
while(b){
if(b&1)res=mul(res,a,p);
a=mul(a,a,p);b>>=1;
}
return res;
}
int Exgcd(int a,int b,int &x,int &y){
if(!b){x=1,y=0;return a;}
int res=Exgcd(b,a%b,x,y);
int tmp=x;x=y;y=tmp-a/b*y;
return res;
}
map<ll,ll>mp;
int T,opt;
signed main(){
scanf("%lld%lld",&T,&opt);
for(;T;--T){
int y,z,p;
scanf("%lld%lld%lld",&y,&z,&p);
if(opt==1)printf("%lld\n",qpow(y,z,p));
else if(opt==2){
int x,yy;
int G=Exgcd(y,p,x,yy);
if(z%G){puts("Orz, I cannot find x!");continue;}
int tmp=p/G;while(x<0)x+=tmp;
printf("%lld\n",((x*z/G)%tmp+tmp)%tmp);
}
else{
mp.clear();
if(y%p==0&&z){puts("Orz, I cannot find x!");continue;}
int m=ceil(sqrt(p)),f=qpow(y,m,p),now=z%p;
for(int i=1;i<=m;++i)now=mul(now,y,p),mp[now]=i;
now=1;int flag=1;
for(int i=1;i<=m;++i){
now=mul(now,f,p);
if(mp[now]){
int ans=add(mul(i,m,p),-mp[now],p);
printf("%lld\n",add(ans,p,p));
flag=0;break;
}
}
if(flag)puts("Orz, I cannot find x!");
}
}
return 0;
}
\(\text{Hash}\)使用了\(\text{map}\).
时间复杂度\(O(\sqrt{\phi(p)})\),非扩展\(BSGS\)适用于\(p\)为质数情况。\(gcd(p,a)=1\).
浅谈BSGS的更多相关文章
- 浅谈BSGS(大步小步)及其扩展
用途: 一般用来求\(a^x\equiv b\,\,(mod\,p)\)的最小正整数解,其中gcd(a,p)=1 设\(u=\lceil sqrt(p)\rceil\),则式子可以转化为\(a^{iu ...
- 浅谈BSGS和EXBSGS
我的 BSGS 和各位犇犇的差不多,但是不需要求逆元 Luogu [ TJOI2007 ] 可爱的质数 原题展现 题目描述 给定一个质数 \(p\),以及一个整数 \(b\),一个整数 \(n\),现 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
随机推荐
- Labview学习之路(十)文本文件再次写入不覆盖
- Android开发之java代码工具类。判断当前网络是否连接并请求下载图片
package cc.jiusan.www.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; ...
- 关于移动端的文本框获取焦点时导致fixed或absolute定位的按钮被手机键盘顶上去的问题
var win_h = $(window).height();//关键代码 window.addEventListener('resize', function () { if($(window).h ...
- Java垃圾回收略略观
本文主要介绍Java垃圾回收(Garbage Collection),90%干货,文字颇多,需要耐心一点看. [对象判断状态算法] ------引用计数法 在创建对象时,为对象创建一个伴生的引用计数器 ...
- 项目中使用mybatis报错:对实体 "serverTimezone" 的引用必须以 ';' 分隔符结尾。
报错信息如下: Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### ...
- 为系统增加删除swap空间
增加 1.创建/home/swap这么一个分区文件.文件大小是512000个block,一般情况下1个block为1k,所以这里空间是512M,这个空间大小自己随意定义. dd if=/dev/zer ...
- poi自动生成Ecxel表格和Chart图表
最近因为业务需求,需要做poi自动导出Ecxel表格和Chart折线图的功能. 所以我在网上找到了一篇关于poi生成Chart图表的博客,代码很详细,但是缺少相关注释说明. 想要将它改造成自己需要的样 ...
- Java 后端开发常用的 10 种第三方服务
请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 严格意义上 ...
- linux基础一(目录结构)
一.linux目录结构 1.根目录/下 bin:用户二进制文件,常用命令都在此目录下 sbin;这个目录下的linux命令通常由系统管理员使用 etc:包含所有程序所需的配置文件,以及服务的启动文件 ...
- 【NOIP2013模拟】七夕祭
题目描述七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ今年举办了一次线下七夕祭.Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和 ...