CCF NOI 1028 判斷互質 :利用歐幾里得演算法最大公因數

Harker11發表於2021-01-02

題目描述
輸入兩個正整數m和n,判斷m和n是否互質(即最大公約數為1),是則輸出Yes,否則輸出No。

輸入:輸入兩個整數m和n,中間用空格隔開。

輸出:如互質輸出Yes,否則輸出No。

樣例輸入:36 56

樣例輸出:No

資料範圍限制:1<=n,m<2^31

題目分析
1、m,n取值範圍都極大,無法通過暴力計算
2、判斷互質的標準為最大公約數是否為1

具體程式碼
1、常規輸入m,n

	int m, n;
	cin >> m >> n;

2、歐幾里得演算法求最大公因數max

	int a = m, b = n, ok = 1, max, r, q;
	while (ok) {
		r = a % b;	//餘數
		q = a / b;	//商
		if (!r) {	//餘數為零時
			max = b;	//最大公約數為除數
			ok = 0;		//跳出迴圈
		}
		else {	//繼續運算
			a = b;	//令新被除數為舊除數
			b = r;	//令新除數為舊餘數
		}
	}

3、判斷是否互質輸出

	if (max == 1)cout << "Yes";
	else cout << "No";



C++滿分完整程式碼如下

#include<iostream>

using namespace std;

int main() {

	int m, n;
	cin >> m >> n;

	int a = m, b = n, ok = 1, max, r, q;
	while (ok) {
		r = a % b;
		q = a / b;
		if (!r) {
			max = b;
			ok = 0;
		}
		else {
			a = b;
			b = r;
		}
	}

	if (max == 1)cout << "Yes";
	else cout << "No";

	return 0;
}

相關文章