题目及解析
求关于x的同余方程ax≡1(mod b)的最小正整数解。
ax≡1(mod b)等价于 ax + by = 1
ax≡1(mod b)——>ax mod b=1——>ax-b⌊ax/b⌋=1——>设y=-⌊ax/b⌋——>ax+by=1
拓展欧里几得
拓展欧里几得即求不定方程 ax + by = d { gcd (a,b) | d } 的一组整数解的算法
设 x’ , y’ 为 bx + ( a mod b ) y = d 的一组整数解
bx’ + ( a - ⌊a/b⌋b ) y’ =d
再将含 a 和含 b 的放在一起 ay’ + b ( x’ - ⌊a/b⌋y’ ) =d
代入 x = y’ , y = x’ - ⌊a/b⌋y’ 就能得到原方程的一组整数解
过程中递归求解即可
谢谢MW大佬讲课%%
代码
#include <cstdio>
using namespace std;
long long a,b,x,y,k;
void exgcd(long long a,long long b){
if (b==0) {
x=1;
y=0;
return;
}
exgcd(b,a%b);
k=x;
x=y;
y=k-a/b*y;
}
int main(){
scanf("%lld%lld",&a,&b);
exgcd(a,b);
printf("%lld",(x+b)%b);
}