https://www.cnblogs.com/sdzwyq/p/9900650.html

模板:

unordered_map<int, int> mp;
LL q_pow(LL n, LL k, LL p) {
LL ans = 1;
if(k == -1) return 0;
while(k) {
if(k&1) ans = (ans*n) % p;
n = (n*n) % p;
k >>= 1;
}
return ans;
}
int BSGS(int a, int b, int p){
int m = sqrt(p)+1, s = b;
mp.clear();
for(int i = 0; i < m; ++i){
mp[s]=i;
s= (s*1LL*a)%p;
}
int t = q_pow(a, m, p);
s = 1;
for(int i = 1; i <= m; ++i){
s = (s*1LL*t)%p;
if(mp.find(s) != mp.end()) return i*m-mp[s];
}
return -1;
}
int exBSGS(int a, int b, int p) {
int d = __gcd(a, p), k = 1, t = 0;
while(d^1){
if(b%d) return -1;
++t;
b /= d;
p /= d;
k = (k*1LL*(a/d)) % p;
if(b == k) return t;
d = __gcd(a, p);
}
int s = b;
mp.clear();
int m = sqrt(p) + 1;
for(int i = 0;i < m; ++i){
mp[s] = i;
s = (s*1LL*a) % p;
}
s = k;
k = q_pow(a, m, p);
for(int i = 1; i <= m; ++i){
s = (s*1LL*k) % p;
if(mp.find(s) != mp.end()) return i*m-mp[s]+t;
}
return -1;
}

例题:P4195 【模板】exBSGS/Spoj3105 Mod

代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define y1 y11
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define pdd pair<double, double>
#define mem(a, b) memset(a, b, sizeof(a))
#define debug(x) cerr << #x << " = " << x << "\n";
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//head unordered_map<int, int> mp;
LL q_pow(LL n, LL k, LL p) {
LL ans = 1;
if(k == -1) return 0;
while(k) {
if(k&1) ans = (ans*n) % p;
n = (n*n) % p;
k >>= 1;
}
return ans;
}
int exBSGS(int a, int b, int p) {
int d = __gcd(a, p), k = 1, t = 0;
while(d^1){
if(b%d) return -1;
++t;
b /= d;
p /= d;
k = (k*1LL*(a/d)) % p;
if(b == k) return t;
d = __gcd(a, p);
}
int s = b;
mp.clear();
int m = sqrt(p) + 1;
for(int i = 0;i < m; ++i){
mp[s] = i;
s = (s*1LL*a) % p;
}
s = k;
k = q_pow(a, m, p);
for(int i = 1; i <= m; ++i){
s = (s*1LL*k) % p;
if(mp.find(s) != mp.end()) return i*m-mp[s]+t;
}
return -1;
}
int a, b, p;
int main() {
while(~scanf("%d %d %d", &a, &p, &b)) {
if(!a && !b && !p) break;
if(b == 1) {
if(p == 1) printf("No Solution\n");
else printf("0\n");
}
else {
int x = exBSGS(a, b, p);
if(~x) printf("%d\n", x);
else printf("No Solution\n");
}
}
return 0;
}

算法笔记--BSGS && exBSGS 模板的更多相关文章

  1. 算法笔记--sg函数详解及其模板

    算法笔记 参考资料:https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html sg函数大神详解:http://blog.csdn.net/l ...

  2. opencv笔记4:模板运算和常见滤波操作

    time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...

  3. BSGS&EXBSGS 大手拉小手,大步小步走

    大步小步走算法处理这样的问题: A^x = B (mod C) 求满足条件的最小的x(可能无解) 其中,A/B/C都可以是很大的数(long long以内) 先分类考虑一下: 当(A,C)==1 即A ...

  4. 算法笔记--数位dp

    算法笔记 这个博客写的不错:http://blog.csdn.net/wust_zzwh/article/details/52100392 数位dp的精髓是不同情况下sta变量的设置. 模板: ]; ...

  5. 算法笔记--lca倍增算法

    算法笔记 模板: vector<int>g[N]; vector<int>edge[N]; ][N]; int deep[N]; int h[N]; void dfs(int ...

  6. [置顶] 小白学习KM算法详细总结--附上模板题hdu2255

    KM算法是基于匈牙利算法求最大或最小权值的完备匹配 关于KM不知道看了多久,每次都不能完全理解,今天花了很久的时间做个总结,归纳以及结合别人的总结给出自己的理解,希望自己以后来看能一目了然,也希望对刚 ...

  7. 学习Java 以及对几大基本排序算法(对算法笔记书的研究)的一些学习总结(Java对算法的实现持续更新中)

    Java排序一,冒泡排序! 刚刚开始学习Java,但是比较有兴趣研究算法.最近看了一本算法笔记,刚开始只是打算随便看看,但是发现这本书非常不错,尤其是对排序算法,以及哈希函数的一些解释,让我非常的感兴 ...

  8. 算法笔记--STL中的各种遍历及查找(待增)

    算法笔记 map: map<string,int> m; map<string,int>::iterator it;//auto it it = m.begin(); whil ...

  9. 算法笔记--priority_queue

    算法笔记 priority_queue<int>que;//默认大顶堆 或者写作:priority_queue<int,vector<int>,less<int&g ...

随机推荐

  1. 【馨儿收藏】群星《2019最新好听DJ舞曲精选》全系列【WAV/在线/百度】(持续更新)

    本人作为一名音乐发烧友,一直喜欢追求无损音乐,平时在开发编程无聊的时候,希望享受音乐的过程,追求完美,我这边整理了一系列的比较不错,新的好听的无损音乐,希望大家能够喜欢. [馨儿收藏]群星<20 ...

  2. 【ARM-Linux开发】Wi-Fi 应用工具wpa_supplicant

    wpa_supplicant是一个跨平台的无线安全管理软件,这里需要用它来对无线网络进行配置,wpa_supplicant相关工具已经移植好,包含在我们提供的文件系统中. 配置无线网络 wpa_sup ...

  3. Xmemcached集群与SpringBoot整合

    创建SpringBoot项目xmemcached_springboot,添加开发需要的包名和类名,项目的目录结构如下: 添加XMemcached依赖: <dependency> <g ...

  4. eNSP——配置全局地址池的DHCP

    原理: 拓扑图: 实验编址: 1.基本配置 2.配置全局地址池的DHCP Server 在R1上开启DHCP功能,使用ip pool命令创建一个全局地址池,名字自己定. 在全局地址池配置网段.掩码.租 ...

  5. python 内置函数input/eval(22)

    python的内置函数其实挺多的,其中input和eval算得上比较特殊,input属于交互式内置函数,eval函数能直接执行字符串表达式并返回表达式的值. 一.input函数 input是Pytho ...

  6. mui 打包发布ios 测试

    1.首先在Hbuilder新建一个app项目,把你的代码放进来 2.在manifest.json里设置你想要的一切,图标,应用名,描述,入口页面等等等,然后再配置好你程序里需要用到的模块权限,按需配置 ...

  7. PHP的 parse_ini_file 解析配置文件

    解析配置文件: parse_ini_file 类似解析php.ini文件样 配置文件内容如下: Example #1 sample.ini 的内容 ; This is a sample configu ...

  8. Hibernate之关联关系(一对多)

    今日分享hibernate框架的简单关联关系 一:关联关系简介 1.1 什么是关联关系 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性. 例如: class B{ ...

  9. Base64编码为什么会使数据量变大

    现在工作中把视频转成base64发现数据量过大无法下载. 1.为什么base64编码会使数据量变大呢? Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据 ...

  10. core项目打包时发现有的项目的xml文件不会被打包进去,怎么办?

    我打包后发现打包后的文件夹内,不存在xml文件,所以swagger加载失败:然后经过测试发现Core项目打包的时候是默认不包含Xml文件的,VS里面也没有办法设置. 解决方法:手动修改项目文件,找到你 ...