Problem Z: 求最大公约数

Problem Z: 求最大公约数

Description

两个数能同时被一个数所整除,这个数就是公约数。例如,12和20的公约数有1,2,4。其中4是12和20的最大公约数。

Input

输入两个正整数,用逗号分隔。

Output

输出这两个数的最大公约数。

Sample Input

24,60

Sample Output

12

该问题可以使用穷举法和辗转相除法来求最大公约数,其中,辗转相除法又可以采用使用递归和不使用递归两种形式。

穷举法源程序如下:

#include<stdio.h>
int main(){
	int m,n,temp,commondivisor=1;
	scanf("%d,%d",&m,&n);
	//小的数放前边
	if(m>n){
		temp=n;
	} 
	else
	temp=m;
	for(int i=temp;i>=1;i--){
		if(m%i==0&&n%i==0){
			commondivisor=i;
			break;
		}
	}
	printf("%d\n",commondivisor);
}

使用辗转相除法(递归)的方式,代码如下:

#include <stdio.h>
#include <stdlib.h>
int getdivisor(int a, int b)
{
    int mod;
    if ((mod = a % b) == 0)
        return b;
    return getdivisor(b, mod);
}
int main()
{
    int m, n,ret;
    scanf("%d,%d", &m,&n);
    ret = getdivisor(m, n);
    printf("%d", ret);
    return 0;
}

使用辗转相除法(非递归)的方式,代码如下:

#include <stdio.h>
#include <stdlib.h>
int getdivisor(int a, int b)
{
    int mod=a % b;
    while (mod!=0)
    {
        a = b;
        b = mod;
        mod = a % b;
    }
    return b;
}
int main()
{
    int m, n,ret;
    scanf("%d,%d", &m,&n);
    ret = getdivisor(m, n);
    printf("%d", ret);
    return 0;
}```

猜你喜欢

转载自blog.csdn.net/AFEI666666/article/details/86485721
今日推荐