

这篇帖子,将考虑如何求指定范围内的质数。
实现函数有如下的特性:
1.它接受2个参数,代表两个边界,比如getPrimes(0, 30),代表求0到30之间的所有质数。
2.两个参数可以第一个比第二个大,比如getPrimes(30, 0),它依然代表求0到30之间的所有质数。
3.两个边界值都在考虑的范围内。
4.返回值是一个增序的数组,里面包含该范围内的所有质数。
问题的思路:
1.首先,需要一个判断质数的方法。
2.对参数进行处理,判断上边界和下边界。
3.在范围内进行顺序遍历,只要是质数就存入数组。
代码实现:
//判断是否为质数
function isPrime(number) {
//0,1,负数肯定不是
if(number < 2){
return false;
}
var factor = Math.sqrt(number);
//注意:这里是"<=factor",而不是"<"
//比如说25,factor是5,如果用"<"就会误判
for(var i=2;i<=factor;i++){
if(number % i == 0){
return false;
}
}
return true;
}
//获取范围内的质数
function getPrimes(start, finish) {
//确定上边界
var max = Math.max(start, finish);
//确定下边界
var min = Math.min(start, finish);
var result = [];
//由小到大遍历
for(var i=min;i<=max;i++){
//满足质数条件,存入数组
if(isPrime(i)){
result.push(i);
}
}
return result;
}
//[]
console.log(getPrimes(0, 0));
//[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
console.log(getPrimes(0, 30));
//[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
console.log(getPrimes(30, 0));