首页 > 编程语言 >大步小步算法(BSGS)

大步小步算法(BSGS)

时间:2023-01-15 20:12:20浏览次数:41  
标签:int 小步 long times 算法 ans ksm include BSGS

BSGS是解决\(a^{l}\equiv b(\mod p)\)已知\(a\)、\(b\)、\(p\)的情况下求最小的非负整数\(l\)的算法。
设$m=\left \lceil \sqrt{p} \right \rceil $, \(l=x\times m-y(0\le x< m,0\le y< m)\)
则\(a^{x\times m}\equiv b\times a^{y}(\mod p)\)
枚举y,用map查找到对应的最小的x,求出l的最小值。
代码:

#include<iostream>
#include<cmath>
#include<map>
using namespace std;
int p,b,n;
int m;
map<int,int> f;
long long ksm(long long x,long long y){
	if(y==0){
		return 1;
	}
	long long ans=ksm(x,y/2);
	ans=ans*ans%p;
	if(y%2==1){
		ans=ans*x%p;
	}
	return ans;
}
int main(){
	cin>>p>>b>>n;
	if(n==1){
		cout<<0;
		return 0;
	}
	m=sqrt(p);
	m+=(m*m!=p);
	for(int i=m-1;i>=1;i--){
		f[ksm(b,i*m)]=i;
	}
	int l=p;
	for(int i=0;i<m;i++){
		int w=f[n*ksm(b,i)%p];
		if(w!=0){
			l=min(l,w*m-i);
		}
	}
	if(l==p){
		cout<<"no solution";
		return 0;
	}
	cout<<l;
	return 0;
}

标签:int,小步,long,times,算法,ans,ksm,include,BSGS
From: https://www.cnblogs.com/z-2-we/p/17054037.html

相关文章

  • 对称加密算法
    Alice-->Bob对称算法:key1=key2data--->加密(key1)--->data’--->解密(key2)--->data特性:(1) 加密key1、解密key2相同,即使用同一个密钥,效率高,易实现,适合加密大量数据,如加......
  • leetcode算法入门Day6---滑动窗口
    3.无重复字符的最长子串给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。测试用例:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串......
  • 02_算法分析
    一、算法分析本系列笔记全部来源了《2020最新数据结构与算法教程》,点击视频连接即可跳转观看学习。如有侵权,请联系删除,谢谢。前面我们已经介绍了,研究算法的最终目的就......
  • 和菜鸟一起学算法之三分法求极值问题
    7年,唉,可是他错了,女孩根本不爱他,不过期间他的执着和付出,很让我感动,也许自己不太像他那样,才会让自己有现在的处境吧。也许吧。小感慨下。不过现在也挺好的,上上班,写写文章,然后......
  • 机器学习算法:逻辑回归api介绍
    学习目标知道逻辑回归api的用法sklearn.linear_model.LogisticRegression(solver='liblinear',penalty=‘l2’,C=1.0)solver可选参数:{'liblinear','sag','saga','new......
  • Geohash算法
                   ......
  • 常见算法的拓展
    \(\large\text{Floyed--最小环}\)题目链接思路:枚举环上一条路径\(i\)至\(j\),那么该环一定由是一条\(k\)至\(i\)的边和该路径再加\(j\)至\(k\)的边。在取最......
  • 常用算法模板
    BFS单向BFS不记录层数whilequeue不空:cur=queue.pop()for节点incur的所有相邻节点:if该节点有效且未访问过:queue.push(该节点)......
  • 【数据结构与算法】二分查找算法(C++实现)
    两种写法,取决于划分规则。这两种写法是学的yxc的,至此以后,写二分查找再也不含糊了!yxc的分享在此:二分查找算法模板第一种写法:boolbinarySearch(vector<int>&nums,int......
  • 算法--2023.1.15
    1.力扣198--打家劫舍classSolution{publicintrob(int[]nums){intn=nums.length;int[]dp=newint[n+1];dp[0]=0;......