一 代码
前面质数的练习加上break之后,性能优化了一点,但是实际还可以优化,根据开根号来求最大公因子来优化循环次数,具体看下面的代码,里面注释很详细。
代码也很简单,没必要花太多时间去看。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//测试如下的程序的性能
//在程序执行前,开启计时器
//console.time("计时器的名字")可以用来开启一个计时器
//它需要一个字符串作为参数,这个字符串将会作为计时器的标识
console.time("test");
//打印2-100之间所有的数
for(var i=2 ; i<=100000 ; i++){
var flag = true;
for(var j=2 ; j<=Math.sqrt(i) ; j++){// 开根号的原因看下面例子36注释,很简单,或者再举一个49的为例即可。
if(i%j == 0){
flag = false;
break;
//不加break 215ms
//加break 25ms
//修改j<=后 2.6
}
}
//如果是质数,则打印i的值
if(flag){
//console.log(i);
}
}
//终止计时器
//console.timeEnd()用来停止一个计时器,需要一个计时器的名字作为参数
console.timeEnd("test");
/*
* 36
* 1 36
* 2 18
* 3 12
* 4 9
* 6 6
* 大于6以后,36肯定是不能被整除了,所以通过开根号的方式可以找到最大的公因子,从而改善找质数的内层for循环。
*/
//可以通过Math.sqrt()对一个数进行开方
//var result = Math.sqrt(97);
//console.log("result = "+result)
</script>
</head>
<body>
</body>
</html>