当前位置:  开发笔记 > 编程语言 > 正文

找到具有正好3个除数的数字的更好解决方案

如何解决《找到具有正好3个除数的数字的更好解决方案》经验,为你挑选了2个好方法。

我正在研究一些编程,我找到了一个练习来编写一个算法,找到"三个数字"(数字可以被3个数字整除).我写了这个:

function threesomeNumber(N) {
    var found = 0;
    var i = 1;
    var numberOfDivisions = 1;
    while (found < N) {
        for (var j = 2; j <= i; j++) {
            if (i % j === 0) {
                numberOfDivisions++;
            }
        }
        if (numberOfDivisions === 3) {
            found++;
            console.log(found + " = " + i);
        }
        numberOfDivisions = 1;
        i++;
    }
}

问题是它运行有点慢,我想知道它是否可以更快地完成.有人知道更优化的解决方案吗?我希望它能找到N个连续的三人组号码.



1> Hermann Döpp..:

唯一的三个数字是素数的平方(除数1,p,p ^ 2).只做Erathostenes并返回正方形.

证明:如果它具有奇数个除数,则称其为正方形.由于1和n ^ 2总是n ^ 2的除数,我们可能只有一个除数,ien n的除数将是n ^ 2的另一个除数,因此n是素数.

示例(基于给定代码):

function threesomeNumber(N) {
var found = 0;
var i = 2;
var prime = true;
while (found < N) {
    // Naive prime test, highly inefficient
    for (var j = 2; j*j <= i; j++) {
        if (i % j === 0) {
            prime = false;
        }
    }
    if (prime) {
        found++;
        console.log(found + " = " + (i*i));
    }
    prime = true;
    i++;
  }
}


@PatrickCollins然后它将有四个除数而不是三个:1,两个素数和产品本身.

2> Andrea Dusza..:

你可以实现一个基于Eratosthenes筛的算法.唯一的变化是你没有标记找到的素数的倍数,但是找到的数字的倍数至少有3个除数.原因是你可以确定这些数字的倍数有超过3个除数.

编辑:赫尔曼的解决方案是最好的"三人行".我的想法更为通用,适用于"N-somes".

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有