同餘方程(NOIP2012)
阿新 • • 發佈:2018-12-10
問題描述
求關於x的同餘方程 ax≡1(mod)b的最小正整數解。
輸入檔案
輸入只有一行,包含兩個正整數a,b,用一個空格隔開。
輸出檔案
輸出只有一行,包含一個正整數x0,即最小正整數解。輸入資料保證一定有解。
樣例輸入 3 10
樣例輸出 7
限制與約定 對於40%的資料,2<=b<=1000。 對於60%的資料,2<=b<=50 000 000。 對於100%的資料,2<=a,b<=2000 000 000。
時間限制:1s 空間限制:128MB
題解
裸的擴充套件歐幾里得 (詳見程式碼) 注意:求出x可能為負數,要輸出 (x+b)%b
程式碼
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #include<cstdlib> using namespace std; int a,b,x=0,y=0; void gcd(int a,int b,int& x,int& y) { if(b==0) { x=1;y=0; return; } gcd(b,a%b,y,x); y-=a/b*x; return; } int main() { cin>>a>>b;cin>>a>>b; gcd(a,b,x,y); cout<<(x+b)%b; return 0; }
若您覺得此篇部落格寫得不錯,請別忘了點贊並關注我哦 >_<