在1-200的数组中查找素数

finding prime numbers in an array from 1-200

本文关键字:查找 数组 1-200      更新时间:2023-09-26

一道数学题描述了1-200的数字列表,您必须跳过数字1,然后对于后面的每个数字,从列表中删除该数字的所有倍数。这样做,直到你到达列表的末尾。

这是我迄今为止所拥有的。

var x = []; // creating an array called x with zero numbers
for ( var i = 1; i <= 200; i++ ){
    x.push(i);
};
// x now should have an array that contains the intergers from 1-200.
//looping through the array.
for ( var i = 0; i <= x.length; i++ ){         //going from 1-200
    if (x[i] == 1){
        continue;  // skipping 1
        } else {
            for ( var n = i+1; n <= i; n++){  // take the number 1 index bigger than x[i] 
                if ( n % i == 0){             //find if the modulus of x[n] and x[i] is zeor, meaning it is divisible by x[i]
                    x.shift();                //remove that number
                    console.log(x[n]);
                } else {
                    continue;
                }
        }
    }
};

与其将数字1添加到200,然后删除非素数,不如尝试只将素数放入该列表中。由于这是一个学校的问题(我猜),我不想给你答案,但如果你有更多的问题,我可以回答。

同样,你的嵌套循环将永远不会运行,请再次检查该逻辑。

另一个版本(一如既往地晚了一分钟;-),带有注释

// lil' helper
function nextSet(a,n){
  while(a[n] == 0) n++;
  return n;
}
function setPrimes(a,n){
  var k, j, r;
  n = n + 1;
  k = n;
  while(k--)a[k] = 1;
  a[0] = 0; // number 0
  a[1] = 0; // number 1
  // get rid of all even numbers
  for(k = 4; k < n; k += 2) {
    a[k] = 0;
  }
  // we don't need to check all of the numbers
  // because sqrt(x)^2 = x
  r = Math.floor(Math.sqrt(n));
  k = 0;
  while(k < n){
    k = nextSet(a,k+1);
    // a test if we had them all
    if(k > r){
      break;
    }
    // unmark all composites
    for(j = k * k; j < n; j += 2*k){
      a[j] = 0;
    }
  }
  return a;
}
function getPrimes(n){
  // we know the size of the input
  var primearray = new Array(n);
  // we don't know the size of the output
  // prime-counting is still an unsolved problem
  var output = [];
  setPrimes(primearray, n);
  for(var i = 0; i < n; i++){
    if(primearray[i] == 1){
      output.push(i);
    }
  }
  return output;
}
getPrimes(200);

您可以在另一个素数筛上完成该算法的完整实现。

我相信,这里有一个您想要的工作示例:

function isPrime(num){
  if(num < 2){
    return false;
  }
  for(var i=2,l=Math.sqrt(num); i<=l; i++){
    if(num % i === 0){
      return false;
    }
  }
  return true;
}
function range(f, t){
  for(var i=f,r=[]; i<=t; i++){
    r.push(i);
  }
  return r;
}
function primeRange(from, to){
  var a = range(from, to), r = [];
  for(var i=0,l=a.length; i<l; i++){
    var v = a[i];
    if(isPrime(v)){
      r.push(v);
    }
  }
  return r;
}
var prmRng = primeRange(1, 200);
console.log(prmRng);

我是这样解决的:

let numbers = new Array();
for (let i = 1; i <= 200; i++) {
	numbers.push(i);
}
let primeNumbers = (num) => {
	let prime = new Array();
	for(let i = 0; i < num.length; i++) {
		let count = 0;
		for (let p = 2; p <= num[i]; p++) {
			if(num[i] % p === 0 && num[i] !== 2) {
				count++;
			} else {
				if(num[i] === 2 || count === 0 && num[i]-1 === p) {
					prime[i] = num[i];
				} 
			}
		}
	}
	return prime.filter(Boolean);
}
console.log(primeNumbers(numbers));