在1-200的数组中查找素数
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,然后删除非素数,不如尝试只将素数放入该列表中。由于这是一个学校的问题(我猜),我不想给你答案,但如果你有更多的问题,我可以回答。
同样,你的嵌套循环将永远不会运行,请再次检查该逻辑。
另一个版本(一如既往地晚了一分钟;-),带有注释
// 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));
相关文章:
- Lodash 从值数组中查找数组中的值
- 使用JS查找数组的平均值
- 查找数组javascript中包含的元素类型
- Undercore:查找数组中出现频率最高的对象
- 查找数组's按属性不存在于另一个数组中的对象
- 查找数组中项目包含子字符串的索引
- 按键查找数组中对象的索引
- 按链中的键查找数组元素
- 使用JavaScript查找数组中最近的日期
- 在Javascript中查找数组长度
- 正在查找数组中第一个匹配元素的索引
- Rhino 1.5 R5在查找数组差异时未正确评估JavaScript
- 查找数组值
- 如何在javascript中按属性查找数组中的对象
- 如何使用JavaScript查找数组中的最早日期
- 查找数组中最长的单词/字符串
- 如何查找数组中所有出现的元素的索引(Ramda.js方式)
- 查找数组中的下一个最高数字 - jquery
- 如何查找数组中另一个对象旁边的对象
- 按键查找数组中最接近的 2 个元素