js实现一个能返回输入参数是否为质数的函数(基础面试题一)

解这道题不需要高级的前端知识,主要考察面试者的基础知识是否扎实、逻辑严谨(算是有点偏算法)。

题目:实现一个函数,可以返回输入参数是否为质数。例如若输入的数为2,3,5,7,11...等则返回这些数;如果是1,4,6,8,9等数字,则输出false。

分析:

质数我们都知道,它的定义是只能被自己和1整除,否则不为质数。

1)所以我们可以用求余的方法判断输入的参数除以自身和除以1后余数是否为0.

2)但是我们立刻会想到4也是可以被自己和1整除,不过多了一个2,2也可以整除4,所以条件1)还不够判断

3)再次分析,好像质数当中只有2是偶数,其他都是奇数,是否可以先将参数分为奇数和偶数分别处理呢?

4)但是再次举特殊例子的时候好像又发现3)条件不可行,例如9是奇数,3也可以整除它

5)进一步分析发现,一般的判断还解决不了这个问题,那么我们就只能运用循环了,然后在循环里做判断

6)具体该怎么实现呢?

7)我们肯定能想到质数2肯定要独立作为一个判断或者输出的(我想大家都能想到它的特殊性),且又因为它是最小的质数,所以是否可以将2设置为除数的最小值,然后在循环中不断递增+1,因为输入的参数作为被除数除以除数并求余,如果余数一直不为0,就可以判断这个数就是质数,如果一旦出现余数等于0,那么这个数就不是质数。

如果能在10分钟以内想到第七这个逻辑,那么说明你的基础知识是比较牢固的,对Js掌握的还算不错;但是如果想了半小时勉强想出,但就是不知道怎么实现,那说明你有Js基础,但是可能实践少,缺少锻炼,编程练习少,最主要的是对算法方面的知识比较浅薄,逻辑构建尚未成形,建议是时候花点时间去学习算法了,如果你有时间的话。

代码实现如下:

function isPrimeNumber(number){
    if(number <= 1 || number%1 !== 0){//先对参数进行基础检测
	return false;
    }
    var n = 2;//设置最小的除数
    while (n < number){
	if (number%n == 0) {
	    return false;
	}else{
	    n++;//除数递增
	    continue;//如果除以除数求余后不为0,则一直执行循环(continue的特点),直到n=number跳出循环,此时也证明该number为质数
	}
    }
    return true;
}

console.log(isPrimeNumber(2));//true
console.log(isPrimeNumber(1));//false
console.log(isPrimeNumber(4));//false
console.log(isPrimeNumber(5));//true
console.log(isPrimeNumber(9));//false
console.log(isPrimeNumber(121));//false
console.log(isPrimeNumber(7));//true

当然了,这个肯定不是最优的做法,要应用于项目中的话,肯定要考虑各种情况,最终的代码远不止这样。而这个方法只是为了方便新手学习js时提供的参考而已,锻炼逻辑,也锻炼新手边编程边思考的习惯。

要应用于项目中的话,我个人推荐一个大神给出的答案,链接:点击打开链接

大家如果有更好的方法,欢迎留言(原题出自微信公众号:较真的前端)。

猜你喜欢

转载自blog.csdn.net/charles_tian/article/details/79916305
今日推荐