1265. [NOIP2012] 同餘方程
★☆ 輸入檔案:mod.in
輸出檔案:mod.out
簡單對比
時間限制:1 s 記憶體限制:128 MB
【題目描述】
求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。
【輸入格式】
輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。
【輸出格式】
輸出只有一行,包含一個正整數X0,即最小正整數解。輸入資料保證一定有解。
【樣例輸入】
3 10
【樣例輸出】
7
【資料範圍】
對於 40%的資料,2 ≤b≤ 1,000;
對於 60%的資料,2 ≤b≤ 50,000,000;
對於 100%的資料,2 ≤a, b≤ 2,000,000,000。
思路:裸擴充套件歐幾里得
錯因:其實這個題我應該能寫出來,但是因為一開始考試的時候沒有看第一頁的”12題必須做“,只是想著老師昨天說的四個題裡做三個,然後個人認為自己圖論比數論牛逼所以上來就奔著後三個題去了,直到最後五分鐘才看見這句話無奈只能敲暴力。。。。。。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int x,y; 5 int gcd(int a,int b,int &x,int &y) 6 { 7 if(b==0) 8 { 9 x=1; 10 y=0; 11 return a; 12 } 13 int r=gcd(b,a%b,x,y); 14 int tmp=0; 15 tmp=x; 16 x=y; 17 y=(tmp-(a/b)*y); 18 return r; 19 20 } 21 int main() 22 { 23 int a,b; 24 cin>>a>>b; 25 int r=gcd(a,b,x,y); 26 while(x<0) 27 { 28 x=b+x; 29 } 30 cout<<x; 31 return 0; 32 }