简单求解如下:
for(var i = 2; i*i <= j; i++){
if(j%i == 0) flag = false;
}
埃拉托色尼筛选法。
1、构造一个索引为2,3,4,5,…m的序列 。
2、递增地去除序列中的非素数。
①去掉2的倍数 。
②再去掉3的倍数。
③去掉5的倍数。//4已经被去除
… …
3、经过反复的筛选后,序列只有[2,n]内的素数
function foundPrime(m){
var arr = [];
var cnt = 0;
for(var i = 2; i <= m; i++){
arr[i] = true; //默认全为素数
}
for(var j = 2; j*j <= m; j++){
if(arr[j]){ //如果为素数
var p = j*j;
while(p<=m){
arr[p] = false;
p+=j;//递增筛选
}
}
}
for(i = 2; i <= m; i++){
if(arr[i])
cnt++;
}
return cnt;
}
console.log(foundPrime1(12))