description
輾轉相除法,也稱歐幾里得演算法,是求最大公約數的演算法。輾轉相除法首次出現於歐幾里得的《幾何原本》(第vii卷,命題i和ii)中,而在中國則可以追溯至東漢出現的《九章算術》。
兩個整數的最大公約數(亦稱公約數)是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理:兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數。例如,252和105的最大公約數是21(252 = 21 × 12;105 = 21 × 5);因為252 − 105 = 147,所以147和105的最大公約數也是21。在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至其中乙個變成零。這時,所剩下的還沒有變成零的數就是兩數的最大公約數。
例如,計算a = 1071和b = 462的最大公約數的過程如下:從1071中不斷減去462直到小於462(可以減2次,即商q0 = 2),餘數是147:
1071 = 2 × 462 + 147.
然後從462中不斷減去147直到小於147(可以減3次,即q1 = 3),餘數是21:
462 = 3 × 147 + 21.
再從147中不斷減去21直到小於21(可以減7次,即q2 = 7),沒有餘數:
147 = 7 × 21 + 0.
此時,餘數是0,所以1071和462的最大公約數是21。
input
輸入為多行,每行有一對非負整數a,b,且a*b不會超出int型別的資料範圍。輸入至eof結束。
output
每行輸出一對a,b的最大公約數和最小公倍數,順序與輸入對應。
從整除定義出發:若a整除b(b除以a沒有餘數),則b是a的倍數,a是b的約數,這裡要求b不為0。因此0是任意整數的倍數(任意整數都是0的約數),但是0不能是約數。
sample input
1 12 3
2 23 2
4 67 5
12 6
18 9
24 36
sample output
1 11 6
2 21 6
2 12
1 35
6 12
9 18
12 72
hint
按照題目描述所給的演算法解題,注意以下幾點:輾轉相除法對兩個數的大小關係有要求,根據倍數和約數的數學定義,乙個非0數和0的約數是多少?輾轉相除法的計算過程是符合這種定義的。
#include
intmain()
else
if(b==0)
if(a!=
0&&b!=0)
if(a%b==0)
printf
("%d %d\n"
,b,m/b*n);}
}return0;
}
山東科技大學OJ題庫 1005 貨幣兌換
description 給出人民幣對美元 歐元 日元的當日匯率,求給定金額的人民幣能兌換成外幣的金額,求給定金額的外幣能兌換 民幣的金額。要計算的外幣有三種 美元 歐元 日元。input 輸入有三行。第一行依次為美元 歐元 日元外幣匯率,用空格分開。匯率用100外幣為單位,精確到小數點後4位,如66...
山東科技大學OJ題庫 1404 你過線了嗎?
description 經過四年的學習,你決定報考我國著名的 285 高校之一的北青大學,經過認真的複習,殘酷的考試,終於知曉了自己的考試成績,也知道了北青大學的錄取分數線,請你程式設計判斷,自己過線了嗎?input 輸入有2行,第一行有4個正整數,分別表示三門課程的分數線以及總分分數線。第二行有3...
山東科技大學OJ題庫 1145 求累加和
description 程式設計求min max的累加和 含min和max 其中max min 0。input 輸入為多行。第一行是乙個整數n 0,表示後面有n個測試用例。後面有n行,每行包含2個整數,分別是min和max。output 輸出為n行,每個測試用例的計算結果佔據一行。每行的格式為 ca...