//遍历法求最小公倍数
#include "stdio.h"
int main()
{
int a ,b ,i,c;
scanf("%d %d", &a, &b);
for(i = 1; i <= a; i++)
{
if(a % i ==0 && b % i == 0)//此时i为最大公约数
{
c = i;
}
}
printf("%d", (a * b) / c);
//注意输出最小公倍数不能放在for里面,否则(如果需要多次循环)会多次输出。外面也不能直接用i进行计算(因为会继续运算加上去,直到不满足i<=a的条件),需要用一个额外的变量在if里来暂存i。
//公约数显然是能让两个数都对其取余的结果==0;经过i一直往上加,并将最符合要求的放入c可得到最大公约数。i必须从1开始遍历,理由是互质数的最大公约数就是1;两数中较大的一方为最小公倍数时,使用此法仍可以正确地得到最大公因数和最小公倍数。
return 0;
} #include<stdio.h>
int main()
{
int A = 0;
int B = 0;
scanf("%d %d", &A, &B);
int m = (A > B ? A : B);
while (m % A != 0 || m % B != 0)
{
m++;
}
printf("%d", m);
return 0;
} 我这个思路是将其中大的数作为标准,进行加一,直到能同时除以A,B时,不进行加一。
#include<stdio.h>
int main()
{
int A = 0;
int B = 0;
scanf("%d %d", &A, &B);
int i = 1;
while (A * i % B != 0)
{
i++;
}
printf("%d", A * i);
return 0;
} 这个代码是简化版,因为上一个是加一太慢了,我们采用一种倍数的关系来解决。首先m / a = i; a * i % b == 0. 所以a * i % b == 0时就代表是公倍数了。
#include<stdio.h>
int main()
{
int a,b,out=1;
int j=0;
scanf("%d",&a);
scanf("%d",&b);
int a1,b1;
a1=a;
b1=b;
if(a>b)
{
if(a%b==0)
out=a;
else if(a%b)
{
for(int i=2;i<b;i++)
{
while(a%i==0&&b%i==0)
{
a=a/i;
b=b/i;
i=2;
}
}
out=a*b1;
}
}
else if(a<b)
{
if(b%a==0)
out=b;
else if(b%a)
{
for(int i=2;i<a;i++)
{
while(a%i==0&&b%i==0)
{
a=a/i;
b=b/i;
i=2;
}
}
out=a*b1;
}
}
else
out=a;
printf("%d",out);
return 0;
} //goto 语句用于判断最小公倍数是否能被整除多次,暂时没想到好的算法了。。
#include<stdio.h>
int main()
{
int a,b,max;
int sum=1;
scanf("%d %d",&a,&b);
int i;
if(a>b)
max=a;
else
max=b;
out:
for(i=2;i<=max;i++)
{
if((a%i==0)&&(b%i==0))
{
a/=i;
b/=i;
sum*=i;
goto out;
}
}
sum=sum*a*b;
printf("%d",sum);
} #include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
for(int i=a;i<=a*b;i++)
{
if(i%a==0 && i%b ==0)
{
printf("%d",i);
break;
}
}
return 0;
}