求两数最大公约数和最小公倍数
方法一:单独求解最小公倍数
若大数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, 执行结果
最后按例附上,本人小白一枚,若上述内容有所纰漏错误,欢迎批评指正。