当你要求满足:

$$ A^x \equiv B \ (\bmod \ P) $$

的最小非负整数 x (gcd(A,P)==1)就可以用到 BSGS 了

设 $ m=\sqrt{P} $ 向上取整

处理一下那个式子:

$$ A^{i \times m-j} \equiv B \ (\bmod \ P) $$
$$ A^{i \times m} \equiv B \times A^j \ (\bmod \ P) $$

枚举 j(0到m),将 B*A^j 存入hash表里面
枚举 i(1到m),从hash表中找第一个满足上面这条式子的 j
x=i*m-j 即为所求 (感性理解)

模板题: 【xsy 1754】 离散对数

Description

给定B,N,P,求最小的满足B^L=N(mod P)的非负正数L。保证gcd(B,P)=1。

Input

        多组数据,每行三个空格隔开的整数P,B,N。

Output

        对于每组数据,输出答案。如无解,则输出"no solution"

CODE:

 #include<iostream>
#include<cmath>
#include<cstdio>
#include<unordered_map>
using namespace std; int p,a,b; int qpow(int x,int y){
int ans=;
while(y){
if(y&)ans=1LL*ans*x%p;
y>>=,x=1LL*x*x%p;
}
return ans;
} int BSGS(){
unordered_map<int,int> mp;
int m=ceil(sqrt(p)),tmp;
tmp=b;
for(int j=;j<=m;j++)
mp[tmp]=j,tmp=1LL*tmp*a%p;
tmp=a=qpow(a,m);
for(int i=;i<=m;i++){
if(mp.count(tmp))
return i*m-mp[tmp];
tmp=1LL*tmp*a%p;
}
return -;
} int main(){
while(~scanf("%d%d%d",&p,&a,&b)){
int ans=BSGS();
if(~ans)printf("%d\n",ans);
else printf("no solution\n");
}
}

证明:

有这样一条式子:

证明了这个就搞定了

处理一下这个式子:

手头上的条件:gcd(A,P)=1
欧拉定理:

证完了OvO

BSGS算法 (小步大步 Baby Step Gaint Step)的更多相关文章

  1. Baby Step Gaint Step

    给定同余式,求它在内的所有解,其中总是素数. 分析:解本同余式的步骤如下 (1)求模的一个原根 (2)利用Baby Step Giant Step求出一个,使得,因为为素数,所以有唯一解. (3)设, ...

  2. BSGS算法初探

    前言 \(BSGS\)算法,全称\(Baby\ Step\ Giant\ Step\),即大小步算法.某些奆佬也称其为拔(Ba)山(Shan)盖(Gai)世(Shi)算法. 它的主要作用是求解形式如\ ...

  3. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  4. 数论之高次同余方程(Baby Step Giant Step + 拓展BSGS)

    什么叫高次同余方程?说白了就是解决这样一个问题: A^x=B(mod C),求最小的x值. baby step giant step算法 题目条件:C是素数(事实上,A与C互质就可以.为什么?在BSG ...

  5. 『高次同余方程 Baby Step Giant Step算法』

    高次同余方程 一般来说,高次同余方程分\(a^x \equiv b(mod\ p)\)和\(x^a \equiv b(mod\ p)\)两种,其中后者的难度较大,本片博客仅将介绍第一类方程的解决方法. ...

  6. 【学习笔记】Baby Step Giant Step算法及其扩展

    1. 引入 Baby Step Giant Step算法(简称BSGS),用于求解形如\(a^x\equiv b\pmod p\)(\(a,b,p\in \mathbb{N}\))的同余方程,即著名的 ...

  7. POJ 3243 Clever Y (求解高次同余方程A^x=B(mod C) Baby Step Giant Step算法)

    不理解Baby Step Giant Step算法,请戳: http://www.cnblogs.com/chenxiwenruo/p/3554885.html #include <iostre ...

  8. 解高次同余方程 (A^x=B(mod C),0<=x<C)Baby Step Giant Step算法

    先给出我所参考的两个链接: http://hi.baidu.com/aekdycoin/item/236937318413c680c2cf29d4 (AC神,数论帝  扩展Baby Step Gian ...

  9. HDU 2815 Mod Tree 离散对数 扩张Baby Step Giant Step算法

    联系:http://acm.hdu.edu.cn/showproblem.php?pid=2815 意甲冠军: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...

随机推荐

  1. 聊聊C语言和ABAP

    这个公众号之前的文章,分享的都是Jerry和SAP成都研究院的同事在工作中学到的一些知识和感受.而今天这篇文章,写作的由来是因为最近我又参与了SAP成都数字创新空间应聘者的面试,和一些朋友聊了一些关于 ...

  2. Codeforces Round #316 (Div. 2) B Simple Game 贪心

    贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况 #include<bits/stdc++.h> using namespa ...

  3. 简单shell执行脚本

    #!/bin/bash source /etc/profile APPLICATIONS_HOME="/opt/cpic_analy" APPLICATION_NAME=" ...

  4. WPF知识点全攻略07- 数据绑定(Binding)

    数据绑定是WPF不得不提,不得不会系列之一 数据绑定简言之,就是把数据源的数据绑定到目标对象的属性上.目标对象可以是承自DependencyProperty的任何可访问的属性或控件,目标属性必须为依赖 ...

  5. 用 Deployment 运行应用【转】

    从本章开始,我们将通过实践深入学习 Kubernetes 的各种特性.作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用,这就是本章的内容. Deployment 前面我们已经了解到,Kub ...

  6. 通过例子理解 k8s 架构【转】

    为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的. 执行命令 kubectl run httpd-app --image=httpd --replic ...

  7. vue表单验证:vee-validate中文提示

    官方文档:https://baianat.github.io/vee-validate/guide/ vee-validate可用于vue项目中进行表单验证,使用方法在官方API上都可以查到: 使用过 ...

  8. UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索

    UVa 167 题意:八行八列的棋盘每行每列都要有一个皇后,每个对角线上最多放一个皇后,让你放八个,使摆放位置上的数字加起来最大. 参考:https://blog.csdn.net/xiaoxiede ...

  9. 初涉trie

    trie:字符串算法中的重要“数据结构” 什么是trie trie就是利用字符串的公共前缀所建成的树. 众所周知树是有很多很好的性质的,于是trie可以结合其他知识点做一些有趣的事情. trie的例题 ...

  10. docker-compose volumes指令路径映射问题

    背景:最近在自学docker容器知识,在跟着<Docker - 从入门到实践>进行 docker-compose 搭建django/postgreSQL 实例.在搭建过程中由于自己操作失误 ...