以下是三种编程求两个数最小公倍数的方法,详细介绍见代码注释
/*
列举法求两个数的最小公倍数
*/
#include <stdio.h>
int solve(int a,int b){
//int c = min(a,b);
int i = 2,A = a;
while(A % b != 0){
A = (i++)*a;
}
return A;
}
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",solve(a,b));
return 0;
}
/*
分解质因数法求最小公倍数
按照从小到大的顺序查找质因数,应用循环方式求出因子的重复次数
*/
#include <stdio.h>
#define MAX 1000
int main(){
int a,b,res = 1;
int pi = 0;
int p[MAX];
scanf("%d%d",&a,&b);
int m = a>b?a:b;
int i;
for(i = 2;i<=m;i++){
while(a%i==0 && b%i==0){
p[pi++] = i;
a /= i;
b /= i;
}
while(a%i==0){
p[pi++] = i;
a /= i;
}
while(b%i==0){
p[pi++] = i;
b /= i;
}
}
for(i = 0;i<pi;i++)
res *= p[i];
printf("%d\n",res);
return 0;
}
/*
改进法分解因数法求最小公倍数
不求质因数,而是求普通的因数
按照从大到小的顺序查找因子,共同的因子只取一次
*/
#include <stdio.h>
#define MAX 1000
int main(){
int a,b,res = 1;
int pi = 0;
int p[MAX];
scanf("%d%d",&a,&b);
int min = a<b?a:b;
int i;
for(i = min;i>1;i--){
if(a%i==0 && b%i==0){
p[pi++] = i;
a /= i;
b /= i;
}
if(a%i==0){
p[pi++] = i;
a /= i;
}
if(b%i==0){
p[pi++] = i;
b /= i;
}
}
for(i = 0;i<pi;i++)
res *= p[i];
printf("%d\n",res);
return 0;
}