我爱撸码,撸码使我感到快乐!
大家好,我是Counter,今天非常愉快,没有前几天的相对比较复杂的逻辑思维在里面,今天来写写,利用JS打印质数,基本上很多面试,会很经常的考到。
那废话不多说,直接上代码:

// for循环,打印10000以内的质数
for(var i = 0; i < 10000; i++) {
// 如果这边函数返回true就意味着当前的i是质数,那么将它打印出来
if (num(i)) {
console.log(i);
}
}
// 定义函数,形参a
function num(a) {
// 如果a<2或者a取余2等于0,那么就直接return false,因为我们知道质数的定义是,只能被1和它自己本身整除,那么能被2整除的肯定都不是质数了
if ( a < 2 || a % 2 == 0) {
// 但是2是质数,那这边做下特殊处理。如果传进来的实参是2的话那么返回true
if (a == 2) {
return true;
}
return false;
}
// 这边直接定义变量3,因为偶数全都被我们排除了
var j = 3;
// while循环,如果j小于传进来的参数的话,那么进行里面的语句
while( j < a ) {
// 如果传进来的参数取余j等于0的话,说明能被整除,那么返回false
if ( a % j == 0) {
return false;
}
// 如果取余不为0的话,那么j就再加2,如果j还是小于传进来的参数的话,那么在进行while循环,确保每个数都能除以所有比它小的奇数。
j += 2;
}
// 我们知道3也是质数,那这边3传进来直接就返回true
return true;
}

那这边除了用这种方法,其实还有种方法,那就利用函数的立即执行,也是可以的,直接上代码:

// 函数的立即执行,打印一万以内的所有质数
// 定义函数的立即执行方式
(function num() {
// for循环直接从2开始,因为我们知道0,1不是质数,所以直接弃除
for(var i = 2; i < 10000; i++) {
// 定义个标志为true
var flag = true;
// 再套一层循环,如果j小于i的话,j才自增1,那么意味着,当i为3的时候,才开始进入这个表达式,并且每次都是i取余小于自己的数并且大于等于2的数进行判断
for( var j = 2; j < i; j++) {
// 如果i取余j为0的话说明此时i不是质数,标志等于false
if ( i % j == 0) {
flag = false;
}
}
// 等标志为true时打印出来当前的i值,意味着打印出当前的质数
if (flag) {
console.log(i);
}
}
})();

其实我感觉第二种方法非常的简洁,至于性能的话,经过我测试,第二种函数立即执行打印1万以内的所有质数,耗时在500毫秒左右,当然可能也取决于我电脑性能,浏览器性能,不过我拿两者相对比较来说,第一种方法耗时在100~200毫秒之间。第一种方法的性能会高点,确实应该也是这样的,因为第一种方法咱们都给它把偶数判断都给省了,能不快吗?!而第二种的话,要进行二重循环,又要判断所有的,又要除以比自己小的数,不论奇数,偶数。
所以总结: 如果考虑性能的话就选第一种吧,不想考虑性能,想写的简单点,那就写第二种吧,异曲同工,条条大路通罗马,只不过谁快而已。

最新文章

  1. APUE学习之出错处理
  2. CentOS6.3修复模式/单用户模式修改fstab文件
  3. Windows 10 下安装 npm 后全局 node_modules 和 npm-cache 文件夹的设置
  4. 【JAVA】JAVA 反射
  5. JavaOne 2016——观众得以一睹JShell的威力
  6. VRRP协议具体解释
  7. PHP学习笔记——上传文件到服务端的文件夹下
  8. 疯狂Android第一章:Android环境配置以及基本概念
  9. poj 3264 Balanced Lineup(线段树、RMQ)
  10. 以域管理账户连接到TFS或git时,设置IE允许Cookies
  11. Tomcat8.0 配置环境
  12. Leetcode#191. Number of 1 Bits(位1的个数)
  13. volatile CAS
  14. Ant和Maven
  15. 『TensorFlow』滑动平均
  16. hdu2065 &quot;红色病毒&quot;问题 指数型母函数
  17. 【MVC】View与Control之间数据传递
  18. mysql的表和数据类型
  19. 好用的在线Markdown编辑器
  20. ansible之template模块

热门文章

  1. dubbo+zookeeper+spring实例
  2. php算法题2
  3. 网站favicon图标的显示问题
  4. ios 11越狱移除
  5. [Day8] eclipse
  6. Attention模型
  7. python框架之Django(6)-查询优化之select_related&amp;prefetch_related
  8. python框架之Django(14)-rest_framework模块
  9. python框架之Flask(3)-Blueprint(蓝图)
  10. openshift 容器云从入门到崩溃之六《Source-to-Image》