CCF 1028. 判斷互質
阿新 • • 發佈:2018-12-23
1028. 判斷互質 (Standard IO)
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
題目描述
輸入兩個正整數m和n,判斷m和n是否互質(即最大公約數為1),是則輸出Yes,否則輸出No。
輸入
輸入兩個整數m和n,中間用空格隔開。
輸出
如互質輸出Yes,否則輸出No。
樣例輸入
36 56
樣例輸出
No
資料範圍限制
1<=n,m<2^31
問題分析
求最大公約數可以使用“更相減損術”
更相減損術,又稱"等值演算法"
關於約分問題,實質是如何求分子,分母最大公約數的問題。《九章算術》中介紹了這個方法,叫做”更相減損術”,數學家劉徽對此法進行了明確的註解和說明,是一個實用的數學方法。
例:今有九十一分之四十九,問約之得幾何?
我們用(91,49)表示91和49的最大公約數.按劉徽所說,分別列出分子,分母。
“以少減多,更相減損,求其等也,以等數約之,等數約之,即除也,其所以相減者皆等數之重疊,故以等數約之。”
譯文如下:
約分的法則是:若分子、分母均為偶數時,可先被2除,否則,將分子與分母之數列在它處,然後以小數減大數,輾轉相減,求它們的最大公約數,用最大公約數去約簡分子與分母。
其與古希臘歐幾里德所著的《幾何原本》中卷七第一個命題所論的相同。列式如下:
91 49
42 49
42 7
35 7
28 7
21 7
14 7
7 7
這裡得到的7就叫做“等數”,91和49都是這等數的重疊(即倍數),故7為其公約數.而7和7的最大公約數就是7,(7,7)=7,所以(91,49)=(42,7)=(7,7)=7
程式如下:
#include <iostream> using namespace std; int main() { int n,m,i,j; cin >> n >> m; i=n; j=m; while(i != j) { if(i>j) i -= j; else j -= i; } if(i==1) cout << "Yes"; else cout << "No"; return 0; }