Javascript 250以下素数和的求法 var总和=0 对于(i=0;i

Javascript 250以下素数和的求法 var总和=0 对于(i=0;i,javascript,primes,Javascript,Primes,我正在检查250以下的所有素数之和。我收到一个错误,说我在原始for语句中创建的语句if(I%factor=0)中无效,但有没有办法在if语句中引用它?I%factor==0 使用==进行比较=用于分配。是的,我说三重等于。类型强制很烦人。您需要一个=或==:如果(i%因子==0)使用素数计算,您考虑过使用吗?这是一种更优雅的确定素数的方法,求和结果也很简单 var sieve=新数组(); var maxcount=250; var maxsieve=10000; //构建筛子,将所有数字标

我正在检查250以下的所有素数之和。我收到一个错误,说我在原始for语句中创建的语句if(I%factor=0)中无效,但有没有办法在if语句中引用它?

I%factor==0


使用
==
进行比较<代码>=用于分配。是的,我说三重等于。类型强制很烦人。

您需要一个
=
==
如果(i%因子==0)
使用素数计算,您考虑过使用吗?这是一种更优雅的确定素数的方法,求和结果也很简单

var sieve=新数组();
var maxcount=250;
var maxsieve=10000;
//构建筛子,将所有数字标记为可能的素数。
对于(变量i=2;i
#结果{
宽度:100%;
高度:180像素
}

您同样可以使用此选项

let sum=0;
设num=250;
for(设i=2;i控制台日志(总和)所以我不得不面对一个类似的挑战,下面是我的解决方案,希望对您有所帮助:

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);
函数sumPrimes(num){
//确定一个数是否为素数
函数isPrime(n){
如果(n==2)返回true;
如果(n==3)返回true;
如果(n%2==0)返回false;
如果(n%3==0)返回false;
var i=5;
var w=2;

虽然(i*i这里有一个相当不错的方法来做。它没有筛子那么先进,但它是一个不错的起点。注意:我使用的是ES6语法

 function sumPrimes(num) {

      // determine if a number is prime
      function isPrime(n) {
        if (n === 2) return true;
        if (n === 3) return true;
        if (n % 2 === 0) return false;
        if (n % 3 === 0) return false;

        var  i = 5;
        var  w = 2;
        while (i * i <= n) {
            if (n % i === 0) {
                return false;
            }
            i += w;
            w = 6 - w;
        }
        return true;
      }

      // subtract 1 for 'not being prime' in my context
      var sum = isPrime(num) ? num - 1 : -1;

      for (var x = 0; x < num; x++) {
        if (isPrime(x) === true) {
          sum += x;
        }
      }

      return sum;
    }
/*
*对前n个素数求和
*
*@param n(整数)
*@返回整数
*
*/
函数汇总时间(n){
常数arr=[];
设i=2
while(arr.lengthx+y);
/*
*@param n(整数)
*@返回布尔值
*
*/
函数isPrime(n){
if(n<2){
返回错误
}
对于(让i=2;i根据“”,我已经使用JS实现了代码:

函数isPrime(n){
返回((n/2==1 | | n/3==1 | | n/5==1 | | n/7==1)?真:(n%2==0 | | n%3==0 | | n%5==0 | | n%7==0)?假:真);
};
var=250;
让输出=[];

对于(设i=2;i,这里有一个简单的方法,通过数组循环并实现Eratosthenes的筛选

函数sumPrimes(num){
变量t,v=[],
w=[],
x=[],
y=[],
z=0;
//枚举Vee数组从2开始作为第一个素数

对于(假设a=2;a您需要使用双等分:(i%因子==0)你怎么能计算任何东西呢?你只需要创建
checkIfPrime
函数250次,而且从不调用它。@dfsq的+1。是的,算法没有意义。JavaScript支持一个相等函数,当给定两个不相等类型的东西时,它会尝试以不明显的方式强制它们。三重相等不进行强制,因此它的定义要简单得多倒立并且可能做人们通常期望的事情。例如(0==“”)在JavaScript中计算为true!非常感谢。如果我想说前250个素数的和,而不是250以下的素数的和,这会对代码产生怎样的影响?我不能删除所有0值并循环,直到array.length为250,因为这会弄乱位置的值。hmmmNic,根据你的新问题,我已经修改了t他用JavaScript显示新答案。但是,如果将maxsieve设置回250,原始答案的本质仍然存在。
 /*
 * Sum the first n prime numbers
 *
 * @param n (integer)
 * @return integer 
 *
 */
function sumNprimes(n){
  const arr = [];
  let i = 2

  while (arr.length < n) {
    if (isPrime(i)) {
      arr.push(i)
    }
    i++
  } 
  return arr.reduce( (x,y) => x+y );

  /*
  * @param n (integer)
  * @return Boolean
  *
  */
  function isPrime(n) {

    if ( n < 2 ) {
      return false
    }

    for ( let i = 2; i <= Math.sqrt(n); i++ ) {
      if ( n % i === 0 ) {
          return false;
      } 
    }
    return true
  }

}