题目描述
求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。
输入格式:
输入只有一行,包含两个正整数 a, b,用一个空格隔开。
输出格式:
输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。
分析
首先我们要把方程转换一下:
ax%b=1
然后求余可以化为
ax-by=1
因为题面保证数据有解,并且我们通过列数据推断出:gcd(a,b)=1
所以这题就转化为了exgcd(扩展欧几里德算法)
扩欧是什么请自行百度
那么我们把x求出来以后,还不能直接输出
因为扩欧求的只是最小的x与y而已,但是x可以为负数
。。至于怎么输出正数,有很多方法,我不过根据这题加了一个而已。。
#include <iostream>
#include <cstdio>
using namespace std;
int a,b,x,y;
int exgcd(int a,i