求两数最大公约数和最小公倍数(详解)

求两数最大公约数和最小公倍数

方法一:单独求解最小公倍数

若大数m是小数n的倍数,则大数m为所求的最小公倍数;若不是,另寻找一个能同时被两个整数的自然数。找到第一个后,break终止循环。
终止条件:
1.可把判定条件表示成循环变量满足的基本条件,如本例终止条件表示成i>0.
2.终止条件省略不写,利用循环体中的语句结束循环,如在找到第一个满足条件的自然数利用break语句结束循环。

3.代码如下:

# include<stdio.h>
int main()
{
	while(1){
	int i,num1,num2,temp;
	
	printf("please input two num:");
	scanf("%d%d",&num1,&num2);
	if(num1<num2)
	{temp=num1;num1=num2;num2=temp;}         //m是大数,n是小数
	for(i=num1;i>0;i--)
	{	if(i%num1==0&&i%num2==0)
			{
				printf("最小公倍数是%d\n",i);
				break;}                        //break终止循环,即找到第一个公共倍数即最小公倍数时停止
	}		 }                                  //循环必须加在return之前,循环才能执行
	return 0;
}

4.运行结果
在这里插入图片描述

方法二 求解最大公因数和最小公倍数

1.题目:输入两个整数m和n,求其最大公约数和最小公倍数?
分析:利用辗转相除法,先求解最大公约数,最小公倍数=两数的乘积/最大公因数
2.辗转相除法
例如 113148 和70044
此时
最大公约数应为 5388
最小公倍数应为 113148*70044 / 5388 = 1,470,924
在这里插入图片描述

while(n!=0)
	{
		temp=m%n;
		m=n;
		n=temp;                      //辗转相除法
		
	}

3.完整代码如下

# include<stdio.h>
int main()
{
	int m,n,num1,num2,temp;
	while(1){
	printf("please input two num:");
	scanf("%d%d",&num1,&num2);
	if(num1<num2)
	{temp=num1;num1=num2;num2=temp;}         //m是大数,n是小数
	m=num1;n=num2;							 //区分两数和公因数
	while(n!=0)
	{
		temp=m%n;
		m=n;
		n=temp;                      //辗转相除法
		
	}

	printf("最大公约数是:%d\n",m);
	printf("最小公倍数是%d\n",num1*num2/m);   //最小公倍数=两数乘积/最大公因数
	}                                         //一直循环
	return 0;
}

4, 执行结果
在这里插入图片描述
最后按例附上,本人小白一枚,若上述内容有所纰漏错误,欢迎批评指正。

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值