代码内容
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int gcd(int a, int b)
{return b==0?a:gcd(b,a%b);}
int main()
{
int m,n,t,a,b; t=0;
srand(time(NULL));
m=rand()%10+2;//随机生成两个数
n=rand()%50+10;
printf("%d %d\n",m,n);
a=m;b=n;//先把m和n分别赋值给a和b,用来求最小公倍数。
//法(1)限制条件有两个,余数不为0,继续相除,直到余数为0
//求出最小公约数和最大公倍数 的数值与m和n大小无关,
//所以不用考虑是m%n还是n%m,结果一样。
/*①
while(t=n%m,t!=0) //辗转相除法(欧几里得法)
{n=m;m=t;}
*/
//法(2)一个限制条件。余数不为0,继续相除,直到余数为0
//t的赋值在限制条件里面
/*②
while(n!=0) //辗转相除法(欧几里得法)
{t=m%n;m =n;n=t;}
*/
//法(3)函数递归
//③
m=gcd(m,n);
//最小公倍数--相减法
/*④
while (m!=n)//m,n不相等,大数减小数,直到相等为止
{
if(m>n) m=m-n;
else n=n-m;
}
*/
printf("最大公约数是:%d\n", m);//最后m为最大公约数
printf("最小公倍数是:%d\n",a/m*b);
return 0;
}