// 打印1-100之内的质数
// 质数是指大于1的自然数中,除了1和他本身以外不再有其他因数的自然数;
// 方法1:
//计数器
var count = 0;
for (var i = 2; i <= 100; i++) {
//判断i是否是质数,从1开始算起;
for (var j = 1; j <= i; j++) {
if (i % j == 0) {
count++; // 如果余数是0.让count加1一次;
}
}
if (count == 2) { // 余数为0 的次数是2, 则i是质数;
console.log(i + "是质数");
}
count = 0; // 一个内循环结束后,重置count一次;
}
// 方法2:
var count = 0; //计数器
for (var i = 2; i <= 100; i++) {
// 创建一个boolean值,用来保存结果,默认是true;
flag = true;
for (var j = 2; j < i; j++) {
if (i % j == 0) { // 除掉1和它本身,还有余数,那么不是质数;
flag = false;
}
}
// 如果是质数,输出;
if (flag) {
document.write( i + "<br/>");
}
}
// 测试如下程序的性能, 添加break的必要性
// 在程序执行前,开启计时器
// console.time(“计时器名字")来开启一个计时器
// 它需要一个字符作为参考,这个字符串将会作为计时器的标识;
console.time("test");
var count = 0; //计数器
for (var i = 2; i <= 100; i++) {
// 创建一个boolean值,用来保存结果,默认是true;
flag = true;
for (var j = 2; j < i; j++) {
if (i % j == 0) { // 除掉1和它本身,还有余数,那么不是质数;
flag = false;
break; // 一旦进入判断,说明i不是质数了,此时在循环已没有意义,
// 使用break来结束循环;
// break当满足遇见break关键字,会强制结束当前语句,后面的语句不在执行
// 加break, test: 3.017822265625 ms
// 不加break, test: 5.0068359375 ms
}
}
// 如果是质数,输出;
if (flag) {
document.write( i + "<br/>");
}
}
// 终止计时器
console.timeEnd("test");
// 测试如下程序的性能
//Math.sqrt(i) 对i进行开方, 最大公约数肯定是小于或者等于开方,缩小取值范围,主要是为了提升性能
// 在程序执行前,开启计时器
// console.time(“计时器名字")来开启一个计时器
// 它需要一个字符作为参考,这个字符串将会作为计时器的标识;
console.time("test");
var count = 0; //计数器
for (var i = 2; i <= 100; i++) {
// 创建一个boolean值,用来保存结果,默认是true;
flag = true;
//Math.sqrt(i) 对i进行开方, 最大公约数肯定是小于或者等于开方,缩小取值范围,主要是为了提升性能
for (var j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) { // 除掉1和它本身,还有余数,那么不是质数;
flag = false;
break; // 一旦进入判断,说明i不是质数了,此时在循环已没有意义,
// 使用break来结束循环;
// break当满足遇见break关键字,会强制结束当前语句,后面的语句不在执行
}
}
// 如果是质数,输出;
if (flag) {
document.write( i + "<br/>");
}
}
// 终止计时器
console.timeEnd("test");