重点 :求解最小正整数解
套用exgcd模板求得的是一组特殊解,但其实这一个方程式是有一个解系,在很多问题中是要你求得最小整数解
a,b>0时: 直接
x=(x%b+b)%b;
即可,再代入解出y
a,b,存在负数时,
将b改为-b,再按套路求解
如:
if(t<0)
t=-t;
x=(x%t+t)%t;
模板
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<stack>
using namespace std;
int m,n;
int gcd(int a,int b){
return b == 0 ? a : gcd(b , a%b);
}
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1; y=0; return a;
}
int r=exgcd(b,a%b,x,y);
int t=x; x=y; y=t-a/b*y;
return r;
}
int main(){
int a,b,c,x,y;
while(cin>>a>>b){
if(gcd(a,b)!=1) {
cout<<"sorry"<<endl;
continue;
}
exgcd(a,b,x,y);
x=(x%b+b)%b;
y=(1-a*x)/b;
cout<<x<<" "<<y<<endl;
}
return 0;
}
即可,再代入解出y
a,b,存在负数时,
将b改为-b,再按套路求解
如: