首先来同余的定义:
两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对于模m同余或a同余于b模m
a≡b (mod m)
等价于a与b分别用m去除,余数相同
等价于a*x-b是m的倍数,设为-y倍,于是可以改写为
a*x+m*y=b
例题:
求关于x的同余方程ax≡1(modb)ax \equiv1 \pmod{b}ax≡1(modb)的最小正整数解。
输入描述:
输入只有一行,包含两个正整数a,b,用一个空格隔开。
输出描述:
输出只有一行,包含一个正整数x0x_0x0,即最小正整数解。输入数据保证一定有解。
示例1
输入
3 10
输出
7
根据上文,方程可以改写为
a*x+b*y=1
#include<bits/stdc++.h>
using namespace std;
long long a,b,x,y;
long long int exgcd(long long a,long long b,long long &x,long long &y)
{
if(!b){x=1;y=0;return a;}
long long d = exgcd(b,a%b,x,y);
long long z = x;
x = y;
y = z-y*(a/b);
return d;
}
int main()
{
cin>>a>>b;
exgcd(a,b,x,y);
cout<<(x % b + b) % b<<endl;
}
`