同余方程(求逆元,线性同余方程最小解
# 题意 给定a,b,求出关于方程ax ≡ 1 (mod b) 的最小x 输入保证了一定有解 2 ≤ a,b ≤ 2*10 9 # 题解 ax ≡ 1 (mod b) ax+by=1 通解的表示: x = x 0 + b * k y = y 0 - a * k 所以x 0 % b就是x能取到的最小值 最后要取正余数常用技巧:模以后加上模的数再模一次 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 ll a,b; 5 ll exgcd(ll a,ll b,ll &x,ll &y){ 6 if(b==0){ 7 x=1;y=0; 8 return a; 9 } 10 ll d =exgcd(b,a%b,y,x); 11 y-=a/b*x; 12 } 13 int main(){ 14 cin>>a>>b; 15 ll x,y; 16 exgcd(a,b,x,y); 17 cout<<(x%b+b)%b<<endl; 18 } 来源: https://www.cnblogs.com/hhyx/p/12640304.html