下面是一个关于在js中打印100以内的所有质数的例题:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<script>
var count = 0;
for (var n = 2; n <= 100; n++) {
var result = true;
for (var i = 2; i < n; i++) {
if (n % i == 0) {
result = false;
break;
}
}
if (result) {
count++;
console.log(`当前为第${count}次`);
console.log(`质数为:${n}`);
}
}
</script>
</body>
</html>
理解质数概念:
质数是只能被1和自身整除的正整数。换句话说,质数是除了1和它本身外,没有其他正整数能够整除它的数。
质数是除了1和本身之外没有其他2个正因数相乘从而得到本身的结果。
质数一定是大于等于2的自然数。
解题思路:
首先,通过外循环来得到2-100的所有数字,每次外循环之后,变量n自增,直至超出范围结束。 其次,知道外循环的逻辑,每一次循环会得到一个n,通过对n进行判断是否为质数,在这里,我采用的是对n取余的方法,判断余数是否为0,是则说明有其他因数,但是,这里要注意一点,1和n本身的数字对n取余也会是0,这回导致没有结果输出。所以,这里我采用的是对i的初始值定为2,这样不会出现除以1的情况,然后,让i<n不会取到n本身的问题。在内层循环if条件我通过n%i==0判断出所有不是质数的情况,但是,我们需要的是质数,所以,这里我采用了布尔类型来判断,因为最内层循环不是质数,在最外面我定义了result为true,对于满足质数条件的值跳出不进行内层if判断,然后进行外层的if判断,对于满足内层条件的值重新赋值为false并通过break跳出,进行外层循环的if判断,发现是false跳过,是true输出满足条件的结果进行打印,并且添加计数器,对于每次打印的质数进行输出进行了多少次。
关于在for循环申请var 变量的理解及易错点分析:
上述案例中,内部的for循环假设一直在循环,最开始它会申请一个i变量,在这里判断i的类型是通过后面赋的值来判断是什么类型的变量,在申请i但没赋值时是不知道类型的,只有赋值之后才知道是什么类型。其次开始申请一个变量之后在不跳出内部循环的条件下,会通过i++每循环一次赋予i一个新的值,但是,在跳出内部循环之后进入又一个外部for循环时再次进入内部循环它会再申请一个新的变量i,初始值为2,然后再次进入之前循环往复,直至结束。