给定a,b,求出关于方程ax ≡ 1 (mod b) 的最小x
输入保证了一定有解
2 ≤ a,b ≤ 2*109
# 题解
ax ≡ 1 (mod b)
ax+by=1
通解的表示:
x = x0 + b * k
y = y0 - a * k
所以x0 % 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