【发布时间】:2014-01-04 16:06:27
【问题描述】:
我的问题是编写一个有效的算法来检查给定数字 n 是否为 ab 形式,其中 a, b 是整数 >= 2。我尝试了以下方法,但时间效率不高。
int cnt = 0;
long long i, sq = sqrt(n);
for (i = 2; i <= sq; i++) {
if (n % i == 0) {
cnt++;
n = n / i;
while (n % i == 0) {
n /= i;
cnt++;
}
if (n == 1) {
break;
}
}
}
if (cnt >= 2) {
return true;
}
return false;
【问题讨论】:
-
嗯,XOR 是一个可逆运算,所以这应该很容易......
-
@biziclop 问题被标记为 C/C++,
^在这些语言中将是 XOR -
另外你的实现似乎是错误的,它给了我
trueforn=12。 -
是的,实现不仅慢而且错误。事实上,一旦你找到了任何除数,你就永远不应该回到除数搜索循环(为什么?)