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

猜你喜欢

转载自blog.csdn.net/tainys/article/details/85009684