找到250以下的素数之和

Nic*_*ing 3 javascript primes

var sum = 0

for (i = 0; i < 250; i++) {

    function checkIfPrime() {

        for (factor = 2; factor < i; factor++) {
            if (i % factor = 0) {
                sum = sum;
            }
            else {
                sum += factor;
            }
        }
    }
}

document.write(sum);
Run Code Online (Sandbox Code Playgroud)

我试图检查250以下的所有素数的总和.我收到一个错误,说我在if (i % factor = 0)我原来的语句中创建的语句中无效,但有没有办法在if中引用它声明?

Ste*_*uan 10

通过主要计算,您是否考虑过使用Eratosthenes筛选?这是一种更优雅的方法来确定素数,并且总结结果很简单.

var sieve = new Array();
var maxcount = 250;
var maxsieve = 10000;

// Build the Sieve, marking all numbers as possible prime.
for (var i = 2; i < maxsieve; i++)
    sieve[i] = 1;

// Use the Sieve to find primes and count them as they are found.
var primes = [ ];
var sum = 0;
for (var prime = 2; prime < maxsieve && primes.length < maxcount; prime++)
{
    if (!sieve[prime]) continue;
    primes.push(prime); // found a prime, save it
    sum += prime;
    for (var i = prime * 2; i < maxsieve; i += prime)
        sieve[i] = 0; // mark all multiples as non prime
}

document.getElementById("result").value =
      "primes: " + primes.join(" ") + "\n"
    + "count: " + primes.length + "\n"
    + "sum: " + sum + "\n";
Run Code Online (Sandbox Code Playgroud)
#result {
    width:100%;
    height:180px
}
Run Code Online (Sandbox Code Playgroud)
<textarea id="result">
</textarea>
Run Code Online (Sandbox Code Playgroud)

(编辑)使用更新的算法,现在有两个最大涉及:

  • maxcount是您希望查找的素数的最大数量
  • maxsieve是一个大到足以包含maxcount primes 的筛子的猜测

您必须通过实际检查实际计数来验证这一点,因为有两个终止条件(1)我们达到筛网的极限并且找不到更多的质数,或者(2)我们实际上找到了我们正在寻找的东西.

如果你要将数字增加到远大于250的数字,那么Sieve不再可行,因为它将消耗大量的内存.无论如何,我认为这一切都有道理吗?在这一点上你真的需要自己玩Sieve,而不是依靠我对它的解释.


Ade*_*uyi 5

你可以同样使用这个

let sum = 0;
let num = 250;


for (let i = 2; i < num; i++) {
  let isPrime = true;
  
  for (let j = 2; j < i; j++) {
    if (i % j === 0) {
      isPrime = false;
    }
  }
  
  if (isPrime) {
    sum += i;
  }
}

console.log(sum);
Run Code Online (Sandbox Code Playgroud)