这是函数。基本上我从 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,则问题很简单):
对 a
和 c
进行因式分解。
如果一个包含素数,另一个则不包含素数,则 ab!=cd。
否则,所有素数的度数应为 d:b
关于c++ - 如何检查 a^b == c^d 是否。我面临的问题是循环的速度。我已经优化了寻找指数的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43830997/