同余方程(擴歐模板)
阿新 • • 發佈:2019-03-09
https ret 最小 http etc www. 就是 urn names
洛咕
題意:求關於x的同余方程\(ax\equiv1\pmod{b}\)的最小正整數解.
方程\(ax\equiv1\pmod{b}\)有解當且僅當\(gcd(a,b)=1\).所以方程可寫為\(a*x+b*y=1\),用擴展歐幾裏得算法求出一組特解\(x_0,y_0\),通解是所有模b與\(x_0\)同余的整數,題目要求最小的解,故答案就是\((x_0+b)\mod b\).
#include<bits/stdc++.h> #define LL long long using namespace std; inline LL read(){ LL s=0,w=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();} return s*w; } LL exgcd(int a,int b,LL &x,LL &y){ if(b==0){x=1;y=0;return a;} int d=exgcd(b,a%b,y,x); y-=x*(a/b); return d; } int main(){ LL a=read(),b=read(),x,y; exgcd(a,b,x,y); printf("%lld\n",(x+b)%b); return 0; }
同余方程(擴歐模板)