同余方程
同余方程是一个数学方程式。该方程式的内容为:对于一组整数Z,Z里的每一个数都除以同一个数m,得到的余数可以为0,1,2,…m-1,共m种。我们就以余数的大小作为标准将Z分为m类。每一类都有相同的余数。
问题描述
a x ≡ 1 ( m o d ) b ax≡1( mod )b ax≡1(mod)b
如果你看不懂这个式子,那么我就将其转化一下,这个式子就是等于
ax%b=1%b,
对于转换过的式子我们可以再将其进行二次转换
ax+by=1,这个式子是不是很熟悉啊,没错,这就是拓展欧几里得可以解不等方程,如果不会拓展欧几里得的可以看拓展欧几里得
细节到最后,如果 x x x 太小就不断加 b b b 直到大于等于 0 0 0,太大则一直减 b b b,直到最小正整数解。也就是这么写:(x+b)%b
#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,y,a,b;
inline exgcd(int a,int b)//拓展欧几里得求解方程
{
if(!b){x=1;y=0;return a;}
int r=exgcd(b,a%b);
int tmp=x;
x=y;y=tmp-a/b*y;
return r;
}
signed main()
{
cin>>a>>b;
exgcd(a,b);
cout<<(x+b)%b;//处理负数
return 0;
}