辗转相除法
输入N、M
//N对M求余为A, 若A不为0,则将余值赋给M,M值赋给N,再N%M,一直往下,
//直到N%M=0,中间过程即是N一直大于M的.用一个RES作为中间变量来传值.
//最后,若A=0,则N为最大公约数..最小公倍数为M与N乘积/最大公约数
//所以为了记录M与N的初始值,用m_temp, n_temp来得到M与N的初始值,以方便最后求最小公倍数
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int n,m;
int n_temp,m_temp;
printf("输入两个正整数\n");
scanf("%d %d",&n,&m);
n_temp=n;
m_temp=m;
int res;
if(m>0&&n>0)
{
do{
res=n%m;
n=m;
m=res;
}while(m!=0);
printf("最大公约数是:%d\n",n);
printf("最小公倍数是:%d\n",m_temp*n_temp/n);
}
else printf("wrong\n");
system("pause");
return 0;
}
//在输入时N和M二者大小无所谓
//在do.. while循环中小数模上大数等于小数,所以如果N<M,
//则第一次循环是将二者交换了,以后还是大数模上小数!