最小公倍数
- 最小公倍数:除0以外的公倍数中最小的那个
- 需要判断输入的两个数的大小 定义max和min函数
- max%min==0 则直接返回max
如: 12 ,3 最小公倍数为12 - max % min !=0时 需要用到迭代
j的范围: j >max && j <min*max
满足 j%min == 0 && j % max ==0 j就是最小公倍数
最大公约数
最大公约数=两数乘积/最小公倍数
辗转相除法:
x>y的情况
1.x%y 得余数temp
2.temp==0 y表示最大公约数
3.temp !=0 x=y; y=temp; 回到1
int commonDivisor(int x,int y)
{
int maxOne=max(x,y);
int minOne=min(x,y);
if(maxOne%minOne== 0){
return minOne;
}else{
int temp = maxOne%minOne;
maxOne = minOne;
minOne = temp;
commonDivisor(maxOne,minOne); /*递归调用*/
}
}
完整代码
#include <stdio.h>
int main(void){
int min(int x,int y); //返回最小数
int max(int x,int y); //返回最大数
int commonMultiple(int x,int y); //最小公倍数
int commonDivisor(int x,int y); //最大公约数
int a,b;
printf("Please enter a:\n");
scanf("%d",&a);
printf("Please enter b:\n");
scanf("%d",&b);
int multiple = commonMultiple(a,b);
printf("The least common multiple is : %d\n",multiple);
int divisor = commonDivisor(a,b);
printf("The greatest common divisor is : %d\n",divisor);
printf("End of procedure !\n");
}
int min(int x,int y)
{
return x<y ? x : y;
}
int max(int x,int y)
{
return x>y ? x : y;
}
int commonMultiple(int x,int y)
{
int maxOne=max(x,y);
int minOne=min(x,y);
if(maxOne%minOne==0){
return maxOne;
}else{
for(int j=maxOne+1;j<=minOne*maxOne;j++){
if(j % minOne == 0 && j % maxOne ==0){
return j;
}
}
}
}
int commonDivisor(int x,int y)
{
// 最大公约数 = x*y/最小公倍数
return x*y/commonMultiple(x,y);
}