C语言,求最大公约数

求最大公约数

方法一:

枚举法:

1.设t为2;
2.如果u和v都能被t整除,则记下这个t;
3.t加1后重复第2步,直到t等于u或v;
4.那么,曾记录的最大的可以同时整除u或v的t就是gcd;

如下图:

枚举法;最大公约数

代码如下:

/*
枚举法

1.设t为2; 
2.如果u和v都能被t整除,则记下这个t; 
3.t加1后重复第2步,直到t等于u或v;
4.那么,曾记录的最大的可以同时整除u或v的t就是gcd; 

*/


#include<stdio.h>

int main ()
{
	int a,b;
	int min;
	
	scanf("%d %d",&a, &b);
	//判断a与b的大小,让min等于当中的最小值
	if ( a<b ) {
		min = a;
	} else {
		min = b;
	}
	//ret来保留最大公约数值
	int ret = 0;
	int i;
	for ( i = 1; i < min; i++) {
		if ( a%i == 0) {
			if ( b%i == 0 ) {
				ret = i;
			}
		}
	}
	  printf ("%d和%d的最大公约数是%d.\n", a, b, ret);
	  
	return 0;
	
}

方法二

转辗相除法:

如果b等于0,计算结束,a就是最大公约数;
否则,计算a除以b的余数。让a等于b,而b等于那个余数;
回到第一步。
例:
a b t
12 18 12
18 12 6
12 6 0
6 0

如下图

转辗相处法

代码如下:

/*
如果b等于0,计算结束,a就是最大公约数;
否则,计算a除以b的余数。让a等于b,而b等于那个余数;
回到第一步。

a   b   t
12  18  12 
18  12  6
12  6   0
6   0

*/
#include<stdio.h>

int main()
{
	int a,b;
	int t;
	scanf("%d %d", &a, &b);
	
	while (b != 0 ) {//判断b是否等于0
		t = a%b;
		a = b;
		b = t;
	}
	printf("最大的公约数%d\n", a);
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值