正整数 a 和正整数 b 的最小公倍数,是指能被 a 和 b 整除的最小的正整数。请你求 a 和 b 的最小公倍数。
比如输入5和7,5和7的最小公倍数是35,则需要返回35。
本题数据范围不大,使用枚举可通过前 5 个点(第六个点会卡 1 ms)
方法一:直接枚举
// 不是满分,谨慎枚举
#include <bits/stdc++.h>
using namespace std;
int main(){
long long a,b,i;
cin>>a>>b;
for(i=1;i%a!=0||i%b!=0;i++){ // 如果 i 不是其中某个数的倍数,就继续枚举
// 纯枚举,这里什么也不用做
}
cout<<i;
return 0;
} 方法二:两个数的最小公倍数=两个数的乘积÷两个数的最大公约数 (满分)
两个数较大时,可以改为 一个数÷两个数的最大公约数×另一个数,防止溢出。但本题数据范围小,不需要考虑溢出。
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main(){
/* 读写优化,新手可忽略
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
*/
long long a,b;
cin>>a>>b;
cout<<a*b/gcd(a,b);
return 0;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
System.out.println((a * b) / ans(a, b));
}
}
public static int ans(int a, int b) {
int max = Math.max(a, b); // 最大值
int min = Math.min(a, b); // 最小值
int ans = max - min; // 最大值减去最小值
if (ans == min) { // 差等于减数结束递归
return ans;
}
return ans(ans, min);
}
#include <stdio.h>
long long getNum(long long x, long long y)
{
while (x % y != 0)
{
long long temp = x % y;
x = y;
y = temp;
}
return y;
}
int main()
{
long long a = 0;
long long b = 0;
scanf("%lld %lld",&a,&b);
long long ret = getNum(a,b);
printf("%lld\n",(a*b)/ret);
return 0;
} #include <iostream>
using namespace std;
int main() {
int a,b;
cin>>a>>b;
//判断ab谁大
int max=a;
int min=b;
if(max<min)
{
//不符合大小规律 交换
max=b;
min=a;
}
//枚举有限情况
for(int i=1;i<=min;i++)
{
long long temp=i*max;
if(temp%min==0)
{
cout<<temp;
break;
}
}
}
// 64 位输出请用 printf("%lld")