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

求解一组ax+bc=gcd(a,b) #include<iostream> #include<cstdio> using namespace std; int exgcd(int A,int B,int &x,int &y){ ){ x=;y=;return A; } int ret=exgcd(B,A%B,x,y); int t=x;x=y;y=t-A/B*y; return ret; } int main(){ int a,b,x,y; while(cin>…
数论进阶 扩展欧几里得算法 裴蜀定理(Bézout's identity) \(1\) :对于任意整数 \(a\),\(b\) ,存在一对整数 \(x\) ,\(y\) ,满足 \(ax+by=GCD(a,b)\) . 2:对于任意整数 \(a\),\(b\) ,二元一次不定方程 \(ax+by=c\) 有整数解 \((x,y)\) 当且仅当 \(GCD(a,b)|c\) . 扩展欧几里得算法(Extended Euclidean algorithm) 首先,我们来回顾一下欧几里得算法: voi…
逆元模板P1082 #include <cstdio> #include <algorithm> int exgcd(int a, int b, int &x, int &y) { if(!b) { x = ; y = ; return a; } int g = exgcd(b, a % b, x, y); std::swap(x, y); y -= (a / b) * x; return g; } int main() { int a, b; scanf(&quo…
模板—数学—Exgcd Code: #include <cstdio> #include <algorithm> using namespace std; int ex_gcd(int a,int b,int &x,int &y) { if(!b) {x=1,y=0;return a;} int gcd=ex_gcd(b,a%b,x,y),tmp=x; x=y,y=tmp-a/b*y; return gcd; } int a,b,c,gcd,x1,y1; int m…
就是一道模板题! 这里再强调一下 BSGS 考虑方程\(a^x = b \pmod p\) 已知a,b,p\((2 \le p\le 10^9)\),其中p为质数,求x的最小正整数解 解法: 注意到如果有解,那么一定满足\(0<x<p\) 设\(t=\lfloor \sqrt p \rfloor\) 那么一定有 \((a^t)^c=ba^d \pmod p\) 此时\(x=ct-d(0 \le d <t)\) 因为$$\frac{a{ct}}{ad} = b \pmod p$$ 那么我们…
方便复制 快速乘/幂 时间复杂度 \(O(\log n)\). ll nmod; //快速乘 ll qmul(ll a,ll b){ ll l=a*(b>>hb)%nmod*(1ll<<hb)%nmod; ll r=a*(b&((1<<hb)-1))%nmod; return (l+r)%nmod; } //快速幂 ll qpow(ll a,ll b){ ll res=1; while(b){ if(b&1)res=res*a%nmod; a=a*a%n…
题目:http://poj.org/problem?id=2115 exgcd裸题.注意最后各种%b.注意打出正确的exgcd板子.就是别忘了/=g. #include<iostream> #include<cstdio> #include<cstring> #define ll long long using namespace std; ll a,b,x,y,r,A,B,C,k,g; ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}…
题目链接 题目描述非常直接,要求你用快速幂解决第一问,exgcd解决第二问,bsgs解决第三问. emmmm于是现学bsgs 第二问让求最小整数解好烦啊…… 假设我们要求得方程$ax+by=c(mod p)$的最小整数解 令$d=gcd(a,b)$ 我们求得一个解$x_0,y_0$使得$ax_0+by_0=d(mod p)$ 然后$x_0*frac{c}{d}$为最小整数解. #include<cstdio> #include<cstdlib> #include<algori…
题目背景 这是一道模板题. 题目描述 给定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105 ) 求 C_{n+m}^{m}\ mod\ pCn+mm​ mod p 保证P为prime C表示组合数. 一个测试点内包含多组数据. 输入输出格式 输入格式: 第一行一个整数T(T\le 10T≤10 ),表示数据组数 第二行开始共T行,每行三个数n m p,意义如上 输出格式: 共T行,每行一个整数表示答案. Lucas定理这个东西就不细学了. 毕竟就一行代码,辣么好背 $\be…
1. gcd: int gcd(int a,int b) { return !b?a:gcd(b,a%b); } exgcd: int exgcd(int a,int b,int& x,int& y) { int d=a; if(b){ d=exgcd(b,a%b,y,x); y-=(a/b)*x; } else{ x=;y=; } return d; }…