在看代码之前,我们先梳理一下逻辑,什么是素数,百度百科上写到,素数又称质数,质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。那我们可以理解为只能被1和它本身整除的数就是素数。
逻辑步骤:
1、整除余数肯定为0。
2、JS里面有求余符号 %
,我们可以判断余数是否为0。
3、一个质数只能被1和它本身整除2次,也就是余数为0的次数只能是2次
4、使用for
循环,对这个整数从1和它本身之间的整数(包括1和它本身)求余。
5、声明一个变量num
,记录余数为0的次数
6、根据步骤3,判断num
(余数为0的次数)是否大于2,如果大于2,则说明这个整数不是质数,反之,这个数就是质数。因为质数只能被1和它本身整除,也就是余数为0的次数只能2次。
接下来看代码
第一种方法:
// 验证一个数字是不是素数/质数
function primeNum(val) {
let n = val && parseInt(val);
// 声明变量,记录余数为0的次数
let num = 0;
// for循环 i初始值从1开始
for(let i = 1; i <= n; i++) {
// 求余,并判断余数是否等于 0 ,如果等于 0 ,则 num 加 1
if(n % i == 0) {
num++
}
}
// 判断 num 是否大于2,大于 2 是合数,否则就是质数
if(num > 2) {
console.log(n + ' 是合数')
} else {
console.log(n + ' 是质数')
}
}
primeNum(7) // 7 是质数
基于第一种方法我们优化一下,质数求余为0的有2次,只能被1和它本身整除,那我们把这两次去掉就可以了。
第二种方法:
function primeNum(nub) {
let n = parseInt(nub);
// 声明变量num,初始值为true
let isPrime = true;
/*
for循环里面的 i 变量初始值从2开始,去掉了可以整除的 1,把等号删掉,
可以去除它本身
*/
for(let i = 2; i < n; i++) {
if(n % i == 0) {
/*
走到这里,说明这个整数除了1和他本身之外,还可以被其他数整除,
isPrime变为false,同时终止循环
*/
isPrime = false;
break;
}
}
if(!isPrime) {
console.log(n + ' 是合数')
} else {
console.log(n + ' 是质数')
}
}
primeNum(7)