1. 程式人生 > >CCF 1028. 判斷互質

CCF 1028. 判斷互質

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;
}