題目及解析
求關於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);
}