求两个数的最大公约数

一.比较两个数中最小数,用x,y分别除以小于等于最小数的数,直到结果为0,这个数就是最大公约数。

#include<stdio.h>
#include<windows.h>
int main()
{
	int x = 12, y = 16;
	int min = x > y ? y : x; //条件运算符:x>y成立,min=y,否则min=x.
	while (min >= 1)
	{
		if (x%min == 0 && y%min == 0)
		{
			printf("%d\n", min);
			break;
		}
		min--;
	}
	system("pause");
	return 0;
}

二.辗转相减法:将两数相减 (大数减去小数)求差,如果差与小数不等,再以大数减去小数求差,直到出 现两数相等为止。那么相等的数,就是所求的两个数的最大公约数。例如:求(792, 594)……表示792, 594的最大公约数。(792, 594) = (792-594, 594)=(198, 594) = (198, 594—198)=(198, 396) = (198, 396—198)=(198, 198),所以792, 594的最大公约数就是198。程序如下:

#include<stdio.h> #include<windows.h> int main() { int x = 792; int y = 594; while (1) { if (x > y) { x -= y; } else if (y > x) { y -= x; } else { break; } } printf("%d\n", x); system("pause"); return 0; }

在while中使用break语句,用于永久终止循环,在执行完break语句后,将执行循环结束后应该执行的那条语句。

三.辗转相除法:设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=q,,,r(0≤r)。若r=0,则(a,b)=b;若r≠0,则再用b除以r,得b÷r=q,,,r(0≤r).若r=0,则(a,b)=r,若r≠0,则继续用r除以r,如此下去,直到能整除为止。其最后一个余数为0的除数即为(a, b)最大公约数。例:792/594=1,,,198,594/198=3,,,0,则其最大公约数为198.

#include<stdio.h>
#include<windows.h>
int main()
{
	int x = 792;
	int y = 594;
	while (x*y!=0)
	{
		if (x > y)
		{
			x %= y;
		}
		else 
		{
			y %= x;
		}
	}
	int d = x == 0 ? y : x;
	printf("%d\n", d);
	system("pause");
	return 0;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值