C语言例题(3)最大公约数

题目3:从键盘输入两个数,求最大公约数和最小公倍数。

程序分析:

最大公约数<最小值,其为能除以两者的最大值

最小公倍数>最大值,其为两者乘积都能得到的最小值

两数乘积=最大公约数x最小公倍数

(1)暴力求解

从两数中最小值开始逐渐减小并让这两个数分别相除,直到没有余数为止。

10 15
15/10=1...5    10/10=1...0
15/9=1...6     10/9=1...1
15/8=1...7     10/8=1...2
15/7=2...1     10/7=1...3
15/6=2...3     10/6=1...4
15/5=3...0     10/5=2...0

代码:

#include<stdio.h>
int main(){
	int a,b;
	int m,n; 
	printf("请输入两个整数:");
	scanf("%d %d",&a,&b);
    m=a<b?a:b;//较小值 
 whlie(1){
	if(a%m==0&&b%m==0){
		printf("最大公约数为:%d\n",m);
		break;
	}
	--m;
}
return 0;
}

从求得最大公约数中求最小公倍数。

n=a*b/m;
printf("最小公倍数为:%d",n);

结果展示:

(2)辗转相除法=欧几里得算法

将两数中的大数除以小数取余,再用小数除以余数。。直到没有余数为止

10 15
15/10=1...5
10/5=2...0

代码:

#include<stdio.h>
int main(){
	int a,b,c;
	int n; 
	printf("请输入两个整数:");
	scanf("%d %d",&a,&b);
if(b>a){//找出最大值 
	c=b;
	b=a;
	a=c;
}  
do{
	n=a%b;
	a=b;
	b=n;
}while(b);//辗转相除 
printf("最大公约数为:%d",a);
return 0;
}

通过if语句把两个数中大的值放a中,小的值放b中;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值