[英]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.