为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

qq_笑_17 2019-08-03 15:03:25

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

在Javascript中,如何找到0到100之间的素数?我想过了,我不知道怎么找到他们。我想做x%x,但我发现了一个明显的问题。到目前为止,这就是我所拥有的:但不幸的是,这是有史以来最糟糕的代码。

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());


查看完整描述

3 回答

?
皈依舞

下面是一个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之间的所有素数数组(包括在内)。当然,由于内存限制,不能在大参数中使用。

Java实现看起来非常类似。




查看完整回答
反对 回复 2019-08-05
?
牧羊人nacy

我就是这样解决的。将它从Java重写为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)]就足够了。




查看完整回答
反对 回复 2019-08-05
?
慕码人2483693

下面是这个脚本的现场演示:http://jsfiddle.net/K2QJp/

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

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,并使用该函数测试每个数字。如果是素数,则将数字输出到日志中。

for(var i = 0; i < 100; i++){
    if(isPrime(i)) console.log(i);}




查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 87 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信