检查一个数是一个** b [英] Check for a number to be a ** b

查看:134
本文介绍了检查一个数是一个** 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆