題目描述
求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。
輸入格式:
輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。
輸出格式:
輸出只有一行,包含一個正整數 x0,即最小正整數解。輸入數據保證一定有解。
輸入樣例#1:
3 10
輸出樣例#1:
7
題解
對於 可以轉化爲: ,我們可以直接用 ,來求出一組解,然後套用同解公式不斷的變小就可以。
注意開
不會擴展歐幾里得的戳
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
ll a,b;
ll Gcd(ll a,ll b)
{
if(!b) return a;
else return Gcd(b,a%b);
}
void Ex_Gcd(ll a,ll b,ll &x,ll &y)
{
if(!b)
{
x=1;y=0;
return ;
}
Ex_Gcd(b,a%b,x,y);
int temp=x;
x=y;
y=temp-(a/b)*y;
return ;
}
int main()
{
scanf("%lld%lld",&a,&b);
ll gcd=Gcd(a,b);
ll x,y;
Ex_Gcd(a,b,x,y);
ll lcm=a*b/gcd;//通解
while(x<0) x+=lcm/a;
while(x-(lcm/a)>0) x-=lcm/a;
printf("%lld",x);
return 0;
}