我们在编程中总遇到求两个数的最大公约数和最小公倍数的问题,那么什么是最大公约数和最小公倍数呢?
所谓最大公约数其实就是这个约数能够被A整除也能被B整除,这个约数就是公约数;找她们公约数中最大的(包括A和B);
所谓最小公倍数其实就是这个倍数能够整除A也能整除B,这个倍数就是公倍数;找他们公倍数中最小的;
要求最大公约数(找他们两个都能整除的数,以12和20为例)12能整除的最大数为自身,20能整除的最大数也是自身,但同时能整除的最大数就是先取两个数中最小的,然后从最小的这个数开始遍历到1找最大公约数;
最小公倍数就是能够整除12和20的数,能整除12的最小数为自身,能整除20的最小数也是自身但能够同时整除12和20的数就是先取两个数中最大的,然后从最大的这个数开始遍历到12*20(两个数相乘肯定能同时整除两个数),如果在两个数中最大的数和两个数的乘积中没有找到最小公倍数那么乘积就为最小公倍数。
#include<stdio.h>
int main(){
//需求1:最大公约数
int m = 12, n = 20;
//取出两个数中的较小值
int min = (m < n) ? m : n;
for (int i = min; i >= 1; i--) {//for(int i = 1;i <= min;i++){
if (m % i == 0 && n % i == 0) {
printf("最大公约数是:%d\n",i); //公约数
break; //跳出当前循环结构
}
}
//需求2:最小公倍数
//取出两个数中的较大值
int max = (m > n) ? m : n;
for (int i = max; i <= m * n; i++) {
if (i % m == 0 && i % n == 0) {
printf("最小公倍数是:%d",i);//公倍数
break;
}
}
}