首页 > 试题广场 >

求最小公倍数

[编程题]求最小公倍数
  • 热度指数:4203 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
正整数 a 和正整数 b 的最小公倍数,是指能被 a 和 b 整除的最小的正整数。请你求 a 和 b 的最小公倍数。
比如输入5和7,5和7的最小公倍数是35,则需要返回35。

输入描述:
输入两个正整数。

1 \le a,b\le 100000


输出描述:
输出最小公倍数。
示例1

输入

5 7

输出

35
示例2

输入

4 6

输出

12
示例3

输入

6 12

输出

12

本题数据范围不大,使用枚举可通过前 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;
}
编辑于 2022-07-15 10:02:02 回复(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);
    }
编辑于 2023-07-06 19:13:57 回复(0)
#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;
}

发表于 2023-05-23 14:10:21 回复(0)
#include <stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
long long i=1;
while(a*i%b)
{
    i++;
}
printf("%lld",a*i);
return 0;
}
发表于 2024-02-06 11:41:46 回复(0)
#include <stdio.h>

int main() {
    int a = 0;
    int b = 0;
    long long  i = 0;

    scanf("%d %d", &a, &b);

    i = 1;
    while(a*i % b)
    {
        i++;
    }

    printf("%lld", a*i);
    return 0;
}


编辑于 2024-01-23 02:28:12 回复(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")

发表于 2023-09-30 21:46:50 回复(0)
#include <stdio.h>

int main()
{
    long long a, b;
    scanf("%lld %lld",&a,&b);
    int i = 1;
    while(a * i % b)
    {
        i++;
    }
    printf("%lld",a*i);
    return 0;
}
发表于 2023-09-19 22:42:13 回复(0)
#include<stdio.h>
int main(int argc, char const *argv[])
{
    int a,b;
    scanf("%d %d",&a,&b);
    int i = 1;
    while (1)
    {
        if ((i%a == 0)&&(i%b == 0))
        {
            printf("%d",i);
            break;
        }
        else
        {
            i++;
        }
    }
    return 0;
}

发表于 2022-07-22 19:49:22 回复(0)

问题信息

难度:
8条回答 3625浏览

热门推荐

通过挑战的用户

求最小公倍数