本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:输入在一行中给出两个正整数M和N(≤1000)。
输出格式:在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
#include<stdio.h>
int main()
{
int M,N,m,n;
int t = 0;
scanf("%d %d",&M,&N);
m = M;
n = N;
while(n!=0)
{
t = m%n;
m = n;
n = t;
}
printf("%d %d",m,M*N/m);
return 0;
}
最大公约数:是两个或多个整数共有约数最大的一个
最小公倍数:两个或多个整数共有的倍数叫做他们的公倍数
常用解法是辗转相除法:欧几里得算法
辗转相除法的核心是不断的让两个数做除法,基于两个整数的最大公约数等于较小的数和两个数的相除余数的最大公约数
假设两数x,y;
先令z=x%y;
之后y赋值给x,x=y;
再将z赋值给y,y=z;
辗转相除,直至y=0;
最大公约数乘最小公因数=两数相乘
#include<stdio.h>
int main()
{
int M,N,m,n;
int t = 0;
scanf("%d %d",&M,&N);
m = M;
n = N;
while(n!=0)
{
t = m%n;
m = n;
n = t;
}
printf("%d %d",m,M*N/m);
return 0;
}