两个正整数的最大公约数是能够整除这两个整数的最大整数,请分别采用如下三种方法编写计算最大公约数的函数Gcd(),在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大公约数。(C语言)

(1)穷举法。用t=a>b?b:a;然后使用for循环for(i=t;i>0;i--)来做。

(2)欧几里得算法,也称辗转相除法。对正整数a和b,连续进行求余运算,直到余数为0为止,此时非0的除数就是最大公约数。设r=a mod b表示a除以b的余数,若r≠0,则将b作为新的a,r作为新的b,即Gcd(a,b)=Gcd(b,r),重复a mod b 运算,直到r=0时为止,此时b为所求的最大公约数。例如,50和15的最大公约数的求解过程可表示为:Gcd(50,15)=Gcd(15,5)=Gcd(5,0)=5。

#include<stdio.h>
int Gcd(int a,int b)
{
	int r = a%b;
	if(r!=0)
		return (r = Gcd(b,r));
	else
		return b;
}
int main()
{
	int a,b,x;
	printf("Input a,b:");
	scanf("%d,%d",&a,&b);
	x=Gcd(a,b);
	printf("%d与%d的最大公约数为%d\n",a,b,x);
	return 0;
}

(3)递归方法。对正整数a和b,当a>b时,若a中含有与b相同的公约数,则a中去掉b后的剩余部分a-b中也含有与b相同的公约数。

#include<stdio.h>
int Gcd(int a,int b)
{
	if(a>b)
		return Gcd(a-b,b);
	else if(a<b)
		return Gcd(a,b-a);
	else
		return a;
}
int main()
{
	int a,b,x;
	printf("Input a,b:");
	scanf("%d,%d",&a,&b);
	x=Gcd(a,b);
	printf("%d与%d的最大公约数为%d\n",a,b,x);
	return 0;
}

此外,Gcd()函数还可以使用do while语句来实现:

int Gcd(int a,int b)
{
	int r;
	do{
		r = a%b;
		a = b;
		b = r;
		printf("a=%d,b=%d,r=%d\n",a,b,r);
	}while(r!=0);
	return a;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值