一个C++小问题

输入两个数M,N求它们的最小公倍数和最大公约数。 请说明其主要的思想,谢谢。
只用用循环语句编

#include<iostream.h>

void main()
{
int p,r,n,m,temp;

if(n<m)//把大数放在n中,把小数放在m中.
{temp=n;
n=m;
m=temp;
}
p=n*m;//P是原来两个数n,m的乘积.
while(m!=0)//求两个数n,m的最大公约数.
{
r=n%m;
n=m;
m=r;
}

基本原理如下:
用欧几里德算法(辗转相除法)求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。
例如求1515和600的最大公约数,
第一次:用600除1515,商2余315;
第二次:用315除600,商1余285;
第三次:用285除315,商1余30;
第四次:用30除285,商9余15;
第五次:用15除30,商2余0。
1515和600的最大公约数是15。

两个正整数的最小公倍数=两个数的乘积÷两个数的最大公约数
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。这就是说,求两个数的最小公倍数,可以先求出两个数的最大公约数,再用这两个数的最大公约数去除这两个数的积,所得的商就是两个数的最小公倍数。
例 求105和42的最小公倍数。
因为105和42的最大公约数是21,
105和42的积是4410,4410÷21=210,
所以,105和42的最小公倍数是210。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-24
#include<stdio.h>
void main()
{
int p,r,n,m,temp;
printf("请输入两个整数:");
scanf("%d,%d,"&n,&m);
if(n<m)
{
temp=n;
n=m;
m=temp; /*把大数放在n中,小数放在m中*/
}
p=n*m; /*先将n和m的乘积保存在p中,以便求最小公倍数是用*/
while(m!=0) /*求n和m的最大公约数*/
{
r=n%m;
n=m;
m=r;
}
printf("他们的最大公约数为:%d\n",n);
printf("他们的最小公倍数为:%d\n",p/n); /*p是原来两个整数的乘积*/
)
}