c++ - 如何检查 a^b == c^d 是否。我面临的问题是循环的速度。我已经优化了寻找指数的部分

标签 c++ loops math optimization

这是函数。基本上我从 1 循环到 n 并检查是否 a^b == c^d。我想知道是否有更快的方法来做到这一点。

int power(int x, int n) {
    if (n < 0)
        return this->power(1/x, -1*n);
    else if (n == 0)
        return 1;
    else if (n == 1)
        return x;
    else if (n % 2 == 0)
        return this->power(x * x, n / 2);
    else if (n % 2 != 0)
        return x * (this->power(x * x, (n - 1)/2));
}

int count(int n) {
    int count = 0;
    n = n + 1;
    for(int a = n; a >= 1; --a) {
        for(int b = n; b >= 1; --b) {
            for(int c = n; c >= 1; --c) {
                for(int d = n; d >= 1; --d) {
                    if (this->power(a,b) == this->power(c,d))
                        count = count + 1;
                }
            }
        }
    }
    return count % (this->power(10, 9) + 7);
}

最佳答案

假设 a、b、c、d 是正整数(如果其中一个为 0,则问题很简单):

ac 进行因式分解。

如果一个包含素数,另一个则不包含素数,则 ab!=cd

否则,所有素数的度数应为 d:b

关于c++ - 如何检查 a^b == c^d 是否。我面临的问题是循环的速度。我已经优化了寻找指数的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43830997/

相关文章:

c++ - 获取内置运算符&()的&的类型?

c++ - CRT内存分配

vba - Word VBA Selection.TypeText 和 Selection.InsertParagraph 以错误的顺序插入文本

javascript - 使用 JavaScript 防止标签重叠

c++ - 调试时的奇怪值

c++ - 如何泛化类中的方法

c++ - std::regex_match 和 std::regex_search 之间的区别?

c# - 枚举器问题,有什么办法可以避免两个循环?

java - 嵌套遍历列表,然后最终删除

java - 如何在java中拆分组件上的数学表达式?