[英]finding prime numbers in an array from 1-200
数学问题描述了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,然后删除非质数,请尝试仅将质数放入该列表。 由于这是一个学校问题(我想),所以我不想给您答案,但是如果您有其他问题,我可以回答。
同样,您的嵌套循环将永远不会运行,请再次遍历该逻辑。
我相信,这是您想要的工作示例:
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);
另一个版本(一分钟来太迟了;和往常一样;-),其中有注释
// 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);
您可以在另一个基础上对该算法进行完整的实现。
我是这样解决的:
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.