剛學數論入門,做到模板題練練
題目描述
求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。
輸入輸出格式
輸入格式:輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。
輸出格式:輸出只有一行,包含一個正整數 x,即最小正整數解。輸入數據保證一定有解。
輸入輸出樣例
3 10
7
由題意可知要求x,使得a*x%b==1,所以可知a*x-b*y==1
看做a*x+b*(-y)==1,題面說保證有解所以a,b互質,就可以用EX_GCD了 a*x+b*y=gcd(a,b)
#include<bits/stdc++.h>
using namespace std;
int a,b,x,y;
inline int ex_gcd(int a,int b,int &x,int &y){
if(b==0){
x=1;
y=0;
return a;
}
int res=ex_gcd(b,a%b,x,y);
int oo=x;
x=y;
y=oo-(a/b)*y;
return res;
}
int main(){
scanf("%d%d",&a,&b);
ex_gcd(a,b,x,y);
while(x<0)x+=b;//x可能小於0 如3,10;開始算出的是-3,1
printf("%d\n",x);
}