1265. [NOIP2012] 同餘方程

自為風月馬前卒發表於2017-04-18

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 }

 

相關文章