CCF NOI 1028 判断互质 :利用欧几里得算法最大公因数

题目描述
输入两个正整数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

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

你可能感兴趣的:(c++,算法)