【如皋OJ】C++判断互质

1075: ex423:判断互质

时间限制: 1 Sec  内存限制: 128 MB
提交: 162  解决: 78
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

输入两个正整数m和n,判断m和n是否互质(即最大公约数为1)。

输入

只有1行2个正整数m和n(1<=n,m<231)。

输出

如果2个整数互质,就输出Yes;否则输出No,并在第2行输出这2个整数的最大公约数(注意:这里的要求和教材上不同)。

样例输入

36 56

样例输出

No
4

大家想必听说过欧几里得算法,有了这个算法,这道题就会十分简单。

定理:gcd(a,b) = gcd(b,a mod b),这定理乍一看不容易,可事实上很简单,举个例子,1997和615:

1997=3*615+152

615=4*152+7

152=21*7+5

7=1*5+2

5=2*2+1

2=2*1+0

最后得出1997和615的最大公约数为1。

这有两种写法:

int Euclid_algorithm(int m,int n)
{
    int temp;
    while(m%n>0)
    {
        temp=n;
        n=m%n;
        m=temp;
    }
    return n;
} 
int Euclid_algorithm(int m,int n)
{
	if(m%n==0)return n;
	else return Euclid_algorithm_1(n,m%n);
}

这时,程序就好写了:

#include<bits/stdc++.h>
using namespace std;
int Euclid_algorithm(int m,int n)
{
	if(m%n==0)return n;
	else return Euclid_algorithm(n,m%n);
}
int main()
{
	int m,n,factor,i;
	cin>>m>>n;
	if(m<n) swap(m,n);
	factor=Euclid_algorithm(m,n);
	if(factor==1) cout<<"Yes";
	else cout<<"No\n"<<factor;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u011735418/article/details/85235709