首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何去掉2个数的公约数

问如何去掉2个数的公约数
EN

Stack Overflow用户
提问于 2019-01-18 21:01:14
回答 1查看 76关注 0票数 0

所以我有一个函数,它将一对数字相除,直到它们不再有任何公约数:

代码语言:javascript
复制
void simplify(int &x, int &y){
    for (int i = 2;;++i){
        if (x < i && y < i){
            return;
        }
        while (1){
            if (!(x % i) && !(y % i)){
                x /= i;
                y /= i;
            } else {
                break;
            }
        }
    }
}

我怎样才能让它更有效率呢?我知道这个解决方案中的一个问题是,它测试了复数的可除性,当它到达复数时,它没有任何因子,所以这只是浪费计算。我能做到这一点,而不需要程序事先知道一组素数/在函数运行时计算它们吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-19 03:47:48

听起来像是C++17库特性gcd的工作。

代码语言:javascript
复制
#include <numeric>
void simplify(int &x, int &y)
{
    const auto d = std::gcd(x, y);
    x /= d;
    y /= d;
}

Compiler Explorer

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

https://stackoverflow.com/questions/54254558

复制
相关文章

相似问题

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