EXBSGS简叙
#include <bits/stdc++.h>
#include <tr1/unordered_map>
using namespace std;
using std::tr1::unordered_map;
#define ll long long
const int maxn=1e6+7;
const int mod=998244353;
const int INF=0x3f3f3f3f;
/*
BSGS算法 b^l==n%p 求解最小的l
不妨直接把l拆分成i*m-j,这样的话同余方程就变为b^(i*m)==n*b^j%p
直接枚举j属于[0,m) m=ceil///向上取整(sqrt(p)) map记录当前的j的数值
随后枚举i属于[0,m)查询map是否存在j满足且需要满足i*m>j=op[s]
很显然这只是gcd(b,p)=1的情况,此时枚举只到了m-2与费马小定理对应
EXBSGS 由于gcd(p,b)不一定为1,所以我们可以求出gcd(p,b)根据裴蜀定理,有解的条件gcd(p,b)|n
所以就一直求出gcd(d2=(p/d),b),一直到他们之间互质,期间如果gcd(p/d,b)!|n就是无解
最后可以得到b^cnt/(d1*d2......*dcnt) *b^(l-cnt) == n/(d1*d2......*dcnt)mod(p/(d1*d2......*dcnt))
(d1*d2......*dcnt)=D
b^cnt/D * (b^(l-cnt))===n/Dmod(p/D)
b^cnt/D和n/d互质所以一定有解,所以将原来的S=1ll改为b^cnt/D直接用BSGS求(b^(l-cnt))
求得的x是l-cnt最后要加上cnt
*/
unordered_map<ll,ll>op;
ll p,b,n;
ll quick_pow(ll a,ll b,ll p)
{
ll ans=1;
while (b)
{
if (b&1)///b为奇数
ans=(ans*a)%p;
a=(a*a)%p;///b为偶数
b>>=1;
}
return ans;
}
ll BSGS(ll p,ll b,ll n,ll ans)
{
op.clear();
ll m=ceil(sqrt(p));
ll s=0;
for (ll i=0,s=n;i<m;++i,s=s*1ll*b%p)///枚举的时候map记录位置
{
op[s]=i;
}
for (ll i=0,tmp=quick_pow(b,m,p),s=ans;i<m;++i,s=s*1ll*tmp%p )///查找j
{
if (op.find(s)!=op.end())
{
if (i*m>=op[s])return 1ll*i*m-op[s];
}
}
return -1ll;
}
ll GCD(ll a,ll b){return b?GCD(b,a%b):a;}
ll EXBSGS(ll p,ll b,ll n)
{
b%=p;
n%=p;///先取模一下保证n,b<p
if (n==1||p==1)return 0;///n==1 l==0 p==1 n%1==0 l任意取值,但要最小所以为0
ll cnt=0;
ll d=0;
ll ans=1ll;
while (d!=1)
{
d=GCD(b,p);
if (n%d==1)return -1ll;///同余方程无解
++cnt;
p/=d;
n/=d;
ans=(ans*1ll*b/d)%p;
if (ans==n)return cnt;///特判情况 n*b^(l-cnt)==n/D mod(p/D) 此时的n*D==n%(p/d) 所以l==cnt
}
ll ret=BSGS(p,b,n,ans);
if (ret==-1ll)return -1ll;
else return ret+cnt;///求的是a^(x-cnt)
}
int main()
{
while (EOF!=scanf("%lld%lld%lld",&b,&p,&n))///b^l==n%p
{
if (!b&&!p&&!n)return 0;
ll cnt=EXBSGS(p,b,n);
cnt==-1ll?cout<<"No Solution"<<endl:cout<<cnt<<endl;
}
return 0;
}
EXBSGS简叙的更多相关文章
- C#学习笔记(1) --简叙.net体系结构
1 C#与.NET的关系 (1) C#是专门为与Microsoft的.Net Framework一起使用而设计的. (2) C#是一种基于面向对象设计方法的的语言. (3) 需要注意的是,C#就其本身 ...
- php反序列化简叙
0x01 php简单的反序列化 这题是在网上看到的,原题连接不太了解,但是源码题目给了出来,稍微下文件名和排版在本地测试 <?php class SoFun{ protected $file=' ...
- STL 里面的几个容器简叙
出处:http://blog.csdn.net/niushuai666/article/details/6654951 list1.list的成员函数push_back()把一个对象放到一个list的 ...
- AMD单双桥时序简叙
芯片组(双桥)时序 VBAT :RTC电路的供电3V(RTC电路有问题会导致没复位或不跑码等故障) RTCCLK :晶振起振给南桥提供32.768KHz频率(RTC电路有问题会导致没复位或不跑码等故障 ...
- iOS面试题集锦
一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.怎样防止指针的越界使用问题? 答案: 1 .防止数组越界,必须让指针指向一个有效的内存地址, 2. 防止向一块内存中拷 ...
- 利用窗口引用漏洞和XSS漏洞实现浏览器劫持
==Ph4nt0m Security Team== Issue 0x03, Phile #0x05 of 0x07 |=----------------- ...
- Android SQLite总结[转载]
[转载] :http://blog.163.com/zqy216_2008/blog/static/4119371820119954812509/ 最近在做的项目涉及到了SQLite,大学时没有好好学 ...
- iOS知识点集合--更改(2)
3.nsmutablearray *a 如果直接赋值 a = @[@"d",@""]; 这个时候a 是不可变的 字典也是如此 2.如果接口调用错误的话 打印re ...
- 对称加密之AES加密详解
最近有人问我AES对称加密是啥,我回答了个大概,发现自己不能清晰的讲出来,特此记录,以供学习 一.对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decrypti ...
- HighCharts基本使用
一.简叙 HighCharts是一个非常强大的画图插件,在以后的工作汇报,数字展示,它将是一把利器.既然是插件,那么就有它的使用规则,我们只需要遵循它的使用规则,就可以画出我们想要的展示效果了.期待吗 ...
随机推荐
- SQL 日常练习 (二十)
也只是尽快搬完这快一个月 sql 的砖, 准备要来整新学习模块了, 因此, 正好趁着五一, 加波速. 也会一直坚守和追求, 学无止境, 气有浩然. 每次都会说, 这是一种精神的传承,而我想的是, 不仅 ...
- codeup之日期累加
题目描述 设计一个程序能计算一个日期加上若干天后是什么日期. 输入 输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数. 输出 输出m行,每行按yyyy-mm-dd的个数输出. ...
- 简述odoo18的一个请求执行流程
以下是Odoo中一个完整请求走向的每一步所涉及的技术细节: 用户发起请求: 技术:HTTP/HTTPS协议,通过Web浏览器或其他HTTP客户端库. 到达WSGI服务器: 技术:通常使用Gunicor ...
- Markdown中设置图片尺寸及添加图注
设置缩放比例 使用下面的语法可以调整图片尺寸,同时保证长宽比: <img style="width:缩放比例;" src="图片资源地址"/> 在标 ...
- Vue3 开发需要安装的工具
Node 和Npm 扩展 node运行时和node包管理器 1.node.js.npm 处理TypeScript 2.tsc.tsc-node 创建vue3工程 3.create-preset 处理J ...
- 【2020.11.24提高组模拟】变换 (transform) 题解
[2020.11.24提高组模拟]变换 (transform) 题解 题意描述 给一个大小为\(n\)的\(01\)环\(A\),点编号为\(0,1,\dots,n-1\).每一个点\(i\)都与\( ...
- 关于MUI框架混合AS开发app项目中遇到的百度地图闪退,不显示地图问题的一次记录
才进入公司就让我解决MUI混合app出现的BUG,让只会纯纯原生的我有点崩溃,三天就要结果,不过幸不辱命,今天我把这个问题解决了. 这个BUG是:百度地图崩溃导致应用闪退 上图是H5+androidS ...
- ORA-01555系列:一、ORA-01555错误的本质与原理
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效 ...
- Alovoa - 开源隐私优先的约会平台
项目标题与描述 Alovoa是一个旨在成为首个广泛使用的免费开源约会网络平台.与其他平台不同,Alovoa具有以下核心价值: 无广告 不出售用户数据 无付费功能(无"付费超级喜欢" ...
- 经验贴!万字总结网卡丢包及ping延迟等网络问题排查思路
引言 在运维过程中,出现网络问题是非常棘手的,当访问某服务出现时通时不通的情况时,我们应该如何排查?是不是网卡配置有问题?是不是内核参数有问题?是多网卡吗?有没有做bond?复杂的网络环境经常搞得人晕 ...