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);
}

阅读更多
文章标签: 数论 ex_gcd
个人分类: 洛谷 讲课
上一篇EX_GCD
下一篇费马小定理求逆元
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭