最大公约数

7 篇文章 0 订阅

引子

求两数的最大公约数

-----简单吗?

-----简单!

-----用多种方法求,可以吗?

-----emmmmm....应该可以吧?!!!


正文

方法一:

相信绝大多数人都知道求最大公约数的如下代码所示的这种方法

#include<stdio.h>
#include<Windows.h>

int CommonDivisor(int x,int y)
{
	int min = x > y ? y : x;
	while (min > 1){
		if (x%min == 0 && y%min == 0){
			break;
		}
		min--;
	}
	return min;
}

int main()
{
	int max = CommonDivisor(25, 125);
	printf("%d\n", max);
	system("pause");
	return 0;
}

先判断两个数的大小,将较小的数作为被除数,当满足两个数同时除以该被除数时跳出循环输出最大公约数,否则,被除数减一,循环...

方法二:辗转相减法

百度百科定义为:

辗转相减法,又称尼考曼彻斯法,是一种简便的求出两数最大公约数的方法

算法描述:做一系列减法,从而求得最大公约数。

例如 :

35和14

35-14=21  , 21-14=7 , 14-7=7 , 7-7=0 ,所以35和14的最大公约数为7

36和22

36-22=14 , 22-14=8 , 14-8=6 , 8-6=2 , 6-2=4 , 4-2=2 , 2-2=0, 所以36和22的最大公约数为2

 

#include<stdio.h>
#include<Windows.h>

int CommonDivisor(int x,int y)
{
	while (1){
		if (x > y){
			x = x - y;
		}
		else if (y > x){
			y = y - x;
		}
		else{
			break;
		}
	}
	return x;
}

int main()
{
	printf("%d\n", CommonDivisor(25, 125));
	system("pause");
	return 0;
}

 

 

方法三:辗转相除法

百度百科定义为:

辗转相除法,又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法

算式描述:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反

复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数

例如:

100与125

125%25=25 , 25%25=0 , 所以25为100和125的最大公约数

36和22

36%22=14 , 22%14=8 , 14%8=6 , 8%6=2 ,6%2=0 ,所以2为36和22的最大公约数

#include<stdio.h>
#include<Windows.h>

int CommonDivisor(int x,int y)
{
	while ((x*y)!= 0){
		if (x > y){
			x %= y;
		}
		else if (y > x){
			y %= x;
		}
		else{
			break;
		}
	}
	return x;
}

int main()
{
	printf("%d\n", CommonDivisor(25, 125));
	system("pause");
	return 0;
}

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值