繁体   English   中英

用于 c++ 的内置 std::__gcd() function 不适用于 Mac OS Xcode

[英]inbuilt std::__gcd() function for c++ is not working on Mac OS Xcode

内置 __gcd() function 不适用于 Xcode macOS。 我在 Xcode (macOS Catalina) 上运行了以下代码,它显示错误“使用未声明的标识符 '__gcd'”。

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    cout << "gcd(6, 20) = " << __gcd(6, 20) << endl;
    return 0;

}

请帮帮我

如果使用-std=c++17编译,则可以使用<numeric>中的那个

#include <numeric>

int main()
{
    std::cout << "gcd(6, 20) = " << std::gcd(6, 20) << std::endl;
    return 0;
}

此处的一些答案包含用于计算 gcd 的基于欧几里得的代码。 例如:

int gcd(int a, int b) { if(b == 0){return a;} return gcd(b, a % b); }

您必须注意传递给此 function 的实际 arguments 的顺序。 代码基于a>0b>0a>=b假设。

可以修改代码以消除这些假设。

int gcd(int a,int b)
{
    if(a<0 or b<0)
        return -1;
    
    if(a>b)
        return gcd(b,a);
    
    if(a==0)
        return b;
    
    //Due to Euclidean algorithm
    return gcd(a,b%a); 
}

如果您坚持使用第一个版本,则必须根据上述假设小心发送 arguments。

std::gcd() 在 c++17 中可用

否则,

两个非负整数的 GCD 很容易计算:

int gcd(int a, int b){ int c = a % b; while(c;= 0) { a = b; b = c; c = a % b; } return b;}

参看。 https://www.gamedev.net/forums/topic/358629-built-in-c-command-for-gcd/3354131/

谢谢提问,
在 header 文件下使用以下 function,因为 gcd 在 mac m1 中不起作用:

int __gcd(int a, int b) { 
    if (b == 0) { 
        return a; 
    } 
    return gcd(b, a % b); 
}

然后您可以轻松高效地使用__gcd(a, b) function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM