质数判断

161 阅读1分钟

质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
判断一个数是否是质数:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>判断一个数是否是质数</title>
	</head>
	<body>
		<script>
			var num = prompt("请输入一个整数:");
			if(num <= 1) {
				alert("该值不合法!");
			} else {
				var flag = true;
				for(var i = 2; i < num; i++) {
					if(num % i == 0) {
						flag = false;
					}
				}
				if(flag) {
					alert(num + "是质数!");
				}else{
					alert(num + "不是质数!");
				}
			}
		</script>
	</body>
</html>

打印1-100之间的质数:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>打印1-100之间的质数</title>
	</head>
	<body>
		<script>
			for(var i=2;i<=100;i++){
				var flag=true;
				for(var j=2;j<i;j++){
					if(i%j==0){
						flag=false;
					}
				}
				if(flag){
					console.log(i);
				}
			}
		</script>
	</body>
</html>

打印1-100之间的质数的优化改进:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>打印1-100之间的质数</title>
	</head>
	<body>
		<script>
			//console.time("计时器名字")可打开一个计时器,可用计时器查看代码性能
			console.time("test");
			for(var i=2;i<=100;i++){
				var flag=true;
				//Math.sqrt(i)求开方,判断到这就可,后面的值是重复的
				for(var j=2;j<=Math.sqrt(i);j++){
					if(i%j==0){
						flag=false,不是质数
						flag=false;
						//只要一个i能%j,就证明不是质数,后面其他不用判断
						break;
					}
				}
				//flag=true,是质数
				if(flag){
					//打印需要花费大量时间
					console.log(i);
				}
			}
			//关闭计时器
			console.timeEnd("test");
		</script>
	</body>
</html>