首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cpp中寻找两个数的LCM

在cpp中寻找两个数的LCM
EN

Stack Overflow用户
提问于 2022-09-09 17:42:45
回答 1查看 84关注 0票数 -2

/Here,我为查找两个数字的LCM编写了代码,但我不知道为什么它不适用于9-10位数字。就像我给出的输入为245和922222222,那么它就不是工作,也不显示输出。

//代码如下

代码语言:javascript
复制
#include<iostream>
using namespace std;

long long product;

long long lcm(long long x,long long y){

    if(x>y)
        product=x;
    else
        product=y;

    while(1){
        if(product%x==0 && product%y==0){
            break;
        }
        product++;
    }

    return product;
}

int main(){
    cout<<lcm(245,922222222);
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-09 18:26:26

您的代码运行良好,需要几年时间才能完成。

你在浪费大量的时间检查数字,这不可能是结果。n % (n + 1)不可能是除1以外的任何n0。通常,只有当n % (n + m)n的倍数时,m才能成为n。这意味着您可以将更大的xy添加到product的每个循环中,而不仅仅是1,并减少大量的工作量:

代码语言:javascript
复制
long long lcm(long long x,long long y) {

    long long greater = std::max(x, y);
    long long product = greater;

    while(product % x != 0 || product % y != 0) {
        product += greater;
    }

    return product;
}

演示

当然,即使是这样的工作也比您需要的要多,因为std::gcd存在:

代码语言:javascript
复制
long long lcm(long long x, long long y) {
    return x / std::gcd(x, y) * y;
}

演示

但这可能违反了任务的精神。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73665779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档