[模板] BSGS】的更多相关文章

简介 前置知识: 快速幂&&O(1)快速乘 [模板] 数学基础:快速幂/乘/逆元/exGCD/(ex)CRT/(ex)Lucas定理…
BSGS和EXBSGS是OI中用于解决A^xΞB(mod C)的常用算法. 1.BSGS BSGS用于A,C互质的情况. 令m=sqrt(C),此时x可表示为i*m+j. 式中i和j都<=sqrt(C) 原式Ax≡B(mode C) -->Ai*m * Aj≡B(mode C) 枚举Ai*m,此时Ai*m相当于系数.//O(sqrt(C)) 现在我们可用exgcd/费马小定理求逆元算出Aj%C的值 通过预处理将A1~m存入map/哈希表.//O(1)//用map会多一个log 解决了. 时间复…
BSGS是一种解决一类专门的问题的解法,主要是解决已知A, B, C,求X使得A^x = B (mod p)这一类问题. 解法很简单,先设x = i*m-j(m=ceil(sqrt(p))),然后进行变形,得到ai*m = b*aj (mod p). 先枚举j (范围0-m) ,将 b*aj  存入hash表.再枚举i (范围1-m) ,从hash表中寻找第一个满足ai*m = b*aj  (mod p). 代码: #include<iostream> #include<cstdio&g…
#include<iostream> #include<cstdio> #include<cmath> #include<map> #define LL long long using namespace std; LL p,b,n; LL poww(LL a,LL b,LL p) { LL ans=; while(b) { )ans=ans*a%p; a=a*a%p; b=b>>; } return ans; } LL bsgs(LL a,LL…
exCRT 求解韩信点兵问题,常见的就是合并不同\(mod\). 先mo一发高神的板子 for(R i=2;i<=n;++i){ ll Y1,Yi,lcm=Lcm(p[i],p[1]); exgcd(p[1],p[i],a[i]-a[1],Y1,Yi); add(a[1],mul(p[1],Y1,lcm),lcm),p[1]=lcm; } 思想是合并方程组,现在假设我们要求解的是: \[x-p_0*y_0=a_0\]\[x-p_i*y_i=a_i\] \(x\)是实际的值,显然有: \[p_0*…
<题目链接> 题目大意: P是素数,然后分别给你P,B,N三个数,然你求出满足这个式子的L的最小值 : BL== N (mod P). 解题分析: 这题是bsgs算法的模板题. #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <string> #include <math.h> #include…
模板如下: 扩展版本: 求解a^k=b %p 求k,最小的k一定小于p,否则会重复,否则无解 *********************** gcd(a,p)=1时 设k=mi+v m=sqrt(p); i,v<=m a^v=b*(a^-m)^i %p 打表map for i=0~m-1 (a^i,i) for i=0~m-1 check a^v存在 **************************** gcd(a,p)=t时 (A/t)^c*A^(x-c)=B/(t^c) %C/(t^c)…
题目描述 给定a,b,p,求最小的非负整数x 满足a^x≡b(mod p) 若无解 请输出“orz” 输入输出格式 输入格式: 三个整数,分别为a,b,p 输出格式: 满足条件的非负整数x 输入输出样例 输入样例#1: 5 2 7 输出样例#1: 4 说明 pow有误差 数据保证所有变量都在int范围内 标程 bsgs模板问题 解决bsgs的问题,我们首先可以吧题目a^x=b(mod)p转化为a^(i*m)=b*a^j 然后枚举b*a^j,a^(i*m) 暴力求解 #include<iostre…
模板最主要的是自己看得舒服,不会给自己留隐患,调起来比较简单,板子有得是,最主要的是改造出适合你的那一套.                  ——mzz #include<bits/stdc++.h> #define int long long using namespace std; ; struct Hash_Tablet{ int val,nex,id; }edge[mod<<];],num; int a,b,c,ans; void init(){ memset(first,…
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…