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

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

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

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

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

利用JS打印质数的更多相关文章

  1. 利用lodop打印控件轻松实现批量打印 (转载http://www.thinkphp.cn/topic/13085.html)

    最近在做一个打印程序,要实现批量打印功能,在网上找了很多天,也在tp官网咨询大牛们,对大家的的提议我一一进行了研究,总结如下: 要实现批量打印可以有两个办法: 一是利用专业的报表程序,能实现十分复杂的 ...

  2. js 打印

    关于js打印很简单的一段代码 function doPrint() { var newWindow = window.open("打印窗口", "_blank" ...

  3. js打印html中的内容

    js打印方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  4. 利用JS脚本通过getAttribute()和setAttribute()等对CSS样式进行操作

    HTML中引入CSS样式的方式有三种: 1.最常用的,引入样式表,在样式表中编写样式,引入方式如下:<link href="css/style.css" rel=" ...

  5. js打印Iframe中的内容,并且不需要预览。

    js打印Iframe中的内容,并且不需要预览 js代码如下: <script type="text/javascript" language="Javascript ...

  6. JS 数据类型转换-转换函数、强制类型转换、利用js变量弱类型转换

    1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型 ...

  7. 利用js制作html table分页示例(js实现分页)

    有时候table的列数太长,不利于使用者查询,所以利用JS做了一个table的分页,以下为相关代码 一.JS代码 <script type="text/javascript" ...

  8. 利用JS实现闪烁字体

    以下为在JSP文件中,利用JS实现闪烁字体的代码: HTML代码: <div id="blink">一段会闪烁的字</div> JavaScript代码: ...

  9. 利用JS实现HTML TABLE的分页

    有时候table的列数太长,不利于使用者查询,所以利用JS做了一个table的分页,以下为相关代码 一.JS代码 <script type="text/javascript" ...

随机推荐

  1. 使用redis接管cookie

    class RedisCookie { // 默认配置名称(使用load_config加载) private $_default_config_path = 'package/cache/redis_ ...

  2. java课程课后作业04之动手动脑

    一.多层的异常捕获-1 先贴出代码: public class CatchWho { public static void main(String[] args) { try { try { thro ...

  3. phpStudy apache 启动不了

    做  phpstudy 环境配置的时候,apache 一直启动不了,启动后又停止,80 端口也没有被占用,也下载了 vc9  运行库,还是不行,后来找了半天,中文路径的问题

  4. HTTP状态码--含义

    以下是HTTP状态码(HTTP Status Code)及其解释 1xx(临时响应) (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. (切换协议) 请 ...

  5. Linux命令行下快捷键

    快捷键 说明 Ctrl+a 切换到命令行开始 Ctrl+e 切换到命令行末尾 Ctrl+c 终止当前命令或脚本 Ctrl+d ①退出当前shell,相当于exit②一个个删除光标后字符 Ctrl+l ...

  6. 伪分布式hadoop启动后jps查不到namenode的解决办法

    启动过程没有发现错误,但是jps查看进程时,发现少了NameNode,而DataNode却存在: 原因: 是端口9000已经被占用,解决办法有两个, 第一种:查找占用端口的进程,kill掉它. had ...

  7. mysql5.7 yum安装

    1.在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/ wget http://dev.mysql.com/get/mysql ...

  8. TX2-入门坑点-Ubuntu16.04任务栏消失

    问题:安装cuda过程中出现任务栏消失,快捷键失效的现象. 解决方法:重装桌面无法解决,使用cssm无法解决,最后删除home目录下的 .cache文件夹重启后解决

  9. sale.order

    # 初始化一个变量用来记录产品类型line_type = ''# 循环明细行for product in self.options: # 拿到该明细行的产品类型 product_type = prod ...

  10. android studio/Intellij IDEA(MAC OSX)中android模拟器无法启动的一种原因

    翻了stackoverflow上好多方式,各种重装重启清理缓存,都没有效果. 后来发现,用IDEA创建的模拟器的路径是 /Users/xirtam/.android/avd 而IDE使用的路径是 AN ...