检查一个数是一个** b [英] Check for a number to be a ** b
本文介绍了检查一个数是一个** b的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题是写一个有效的算法来检查是否给定数量的 N 的是形式的在 B 的,其中的一, b 的是整数> = 2。我曾尝试以下,但它不是时间效率。
INT CNT = 0;
长长的我,平方=开方(N);
对于(i = 2; I< =平方;我++){
如果(N%我== 0){
CNT ++;
N = N / I;
同时(N%我== 0){
N / =我;
CNT ++;
}
如果(正== 1){
打破;
}
}
}
如果(CNT> = 2){
返回true;
}
返回false;
解决方案
您既可以解决您的code和更换大大加速这一过程:
如果(N == 1)打破;
与
返回(N == 1);
然后因为你去计算的sqrt(n)的麻烦
,还不如早早退出了完美的正方形:
如果(N ==平方*平方)返回true;
My question is write an efficient algorithm to check whether a given number n is of the form ab where a, b are integers >= 2. I have tried the following but it is not time efficient.
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;
解决方案
You can both fix your code and speed it up considerably by replacing:
if (n == 1) break;
with
return (n == 1);
Then since you went to the trouble of computing sqrt(n)
, might as well have an early exit for perfect squares:
if (n == sq * sq) return true;
这篇关于检查一个数是一个** b的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文