首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到0- 100之间的素数?

如何找到0- 100之间的素数?
EN

Stack Overflow用户
提问于 2012-08-15 16:57:48
回答 39查看 188.1K关注 0票数 60

在Javascript中,我如何找到0- 100之间的质数?我已经考虑过了,但我不确定如何找到它们。我想过做x%x,但我发现了明显的问题。这就是我到目前为止所拥有的:但不幸的是,这是有史以来最糟糕的代码。

代码语言:javascript
复制
var prime = function (){
var num;
for (num = 0; num < 101; num++){
    if (num % 2 === 0){
        break;
    }
    else if (num % 3 === 0){
        break;
    }
    else if (num % 4=== 0){
        break;
    }
    else if (num % 5 === 0){
        break;
    }
    else if (num % 6 === 0){
        break;
    }
    else if (num % 7 === 0){
        break;
    }
    else if (num % 8 === 0){
        break;
    }
    else if (num % 9 === 0){
        break;
    }
    else if (num % 10 === 0){
        break;
    }
    else if (num % 11 === 0){
        break;
    }
    else if (num % 12 === 0){
        break;
    }
    else {
        return num;
    }
}
};
console.log(prime());
EN

回答 39

Stack Overflow用户

发布于 2012-09-06 02:26:38

下面是一个在JavaScript中实现sieve的示例:

代码语言:javascript
复制
function getPrimes(max) {
    var sieve = [], i, j, primes = [];
    for (i = 2; i <= max; ++i) {
        if (!sieve[i]) {
            // i has not been marked -- it is prime
            primes.push(i);
            for (j = i << 1; j <= max; j += i) {
                sieve[j] = true;
            }
        }
    }
    return primes;
}

然后,getPrimes(100)将返回一个由2到100之间(包括2和100)的素数组成的数组。当然,由于内存的限制,您不能将其与大参数一起使用。

Java实现看起来非常类似。

票数 81
EN

Stack Overflow用户

发布于 2012-08-15 18:15:55

下面是我如何解决这个问题的。将其从Java重写为JavaScript,所以如果有语法错误,请原谅。

代码语言:javascript
复制
function isPrime (n)
{
    if (n < 2) return false;

    /**
     * An integer is prime if it is not divisible by any prime less than or equal to its square root
     **/

    var q = Math.floor(Math.sqrt(n));

    for (var i = 2; i <= q; i++)
    {
        if (n % i == 0)
        {
            return false;
        }
    }

    return true;
}

一个数,n,如果它不能被除1和它本身之外的任何其他数整除,则它是质数。另外,检查数字2,sqrt(n)就足够了。

票数 58
EN

Stack Overflow用户

发布于 2012-08-15 17:15:10

这里是该脚本的实时演示:

首先,创建一个函数来测试单个数字是否为质数。如果您想扩展Number对象,您可以这样做,但我决定让代码尽可能简单。

代码语言:javascript
复制
function isPrime(num) {
    if(num < 2) return false;
    for (var i = 2; i < num; i++) {
        if(num%i==0)
            return false;
    }
    return true;
}

此脚本遍历2到1之间的每个小于该数字的数字,并测试如果将该数字除以增量,是否存在没有余数的任何数字。如果有一个没有余数的,它就不是素数。如果数字小于2,则它不是质数。否则,它就是质数。

然后创建一个for循环,循环遍历数字0到100,并使用该函数测试每个数字。如果是质数,则将该数字输出到日志中。

代码语言:javascript
复制
for(var i = 0; i < 100; i++){
    if(isPrime(i)) console.log(i);
}
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11966520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档