1082同餘方程

剛學數論入門,做到模板題練練

題目描述

求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。

輸入輸出格式

輸入格式:

輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。

輸出格式:

輸出只有一行,包含一個正整數 x,即最小正整數解。輸入數據保證一定有解。

輸入輸出樣例

輸入樣例#1:
3 10
輸出樣例#1:
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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章