打印1–100内的质数(JS版实现)
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>打印1--100的质数</title>
<script>
/*
打印1--100的质数 --> 2--100 由于1不是质数
质数:除了1和它本身,便不能再被整除。
例如: 7 % (2--6的数都不为0);
*/
document.write("1--100中是质数的有:" + "<br>");
// 外循环用于遍历2--100中的所有值,可以打印输出看结果。
for(var num = 2; num <= 100; num++){
// 这行代码需要在第一条for循环内,这是因为,第二个在执行for循环时,会执行到flag = false;
var flag = true;
// 内循环:是用于被num除的(所以限制的条件是小于num)至于number的初始值是2,是因为2就是质数,不需要再认证了。
for(var number = 2; number < num; number++){
// 如果不是质数的话,就可以被整除。例如: 4 / 2 = 2...0
if(num % number == 0){
// document.write("num = " + num + ", number = " + number + "<br>"); 用来测试的代码
flag = false;
}
}
// 如果没有执行到 第二条for语句中的,if语句,也说明这个数是质数,那么就会执行下面的语句。
if(flag){
document.write(num + "<br>");
}
}
</script>
</head>
<body>
</body>
</html>
解析已经在里面了,可以在看完代码后,自己试着敲几遍。能够理解每一句的代码的含义,为什么要这么做,而不是那样做?还有什么更好的解决方法吗?
改良版:改良了的部分有两个:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
/*
求1--100的质数
*/
document.write("(1--100)的质数为:");
for(var i = 2; i <= 100; i++){
var flag = true;
/*
内循环的判断条件 变成了这个数的开方。例如 9 开方后是3,只需要判断2和3便可,有开方的一定是质数。
对于非质数: 例如 11,开方是3点多左右,也就是2和3。在这个范围内找已经足够了。
*/
for(var j = 2; j <= Math.sqrt(i); j++){
if(i % j == 0){
flag = false;
// 当判断出了一个数不是质数时,便立即退出内循环
break;
}
}
if(flag){
document.write(i + " ");
}
}
</script>
</head>
<body>
</body>
</html>```