我爱撸码,撸码使我感到快乐!
大家好,我是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毫秒之间。第一种方法的性能会高点,确实应该也是这样的,因为第一种方法咱们都给它把偶数判断都给省了,能不快吗?!而第二种的话,要进行二重循环,又要判断所有的,又要除以比自己小的数,不论奇数,偶数。
所以总结: 如果考虑性能的话就选第一种吧,不想考虑性能,想写的简单点,那就写第二种吧,异曲同工,条条大路通罗马,只不过谁快而已。

利用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. JS创建对象的几种方式整理

    javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一:通过“字面量”方式创建对象 方法:将 ...

  2. [ACM-ICPC 2018 徐州赛区网络预赛][D. Easy Math]

    题目链接:Easy Math 题目大意:给定\(n(1\leqslant n\leqslant 10^{12}),m(1\leqslant m\leqslant 2*10^{9})\),求\(\sum ...

  3. jquery和js检测浏览器窗口尺寸和分辨率

    jquery和js检测浏览器窗口尺寸和分辨率,转载自网络,记录备忘 <script type="text/javascript">$(document).ready(f ...

  4. Oracle课程档案,第一天。

    sys是Oracle最高权限者 DBSNMP:简单网络管理系统 ctrl+d回到oracle目录 在SQL中输入 exit也可以 select:列 where:行 sqlplus / as sysdb ...

  5. MySql的主从复制以及读写分离详解

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  6. linux vue uwsgi nginx 部署路飞学城 安装 vue

    vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...

  7. H5的缓存 manifest

    H5里面的App Cache是由开发Web页面的开发者控制的,而不是由Native去控制的,但是Native里面的WebView也需要我们做一下设置才能支持H5的这个特性. 1.工作原理 写Web页面 ...

  8. JAVA第三周学习总结

    20175303 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 •编程语言的发展分为三个阶段,分别是:面向机器,面向过程,面向对象的语言.Java属于面向对 ...

  9. Django配置相关及其它

    配置 模板 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.pat ...

  10. xampp lampp 改变网页root目录的方法

    This is an old question but I haven't seen it properly answered yet. Here is what you need to do: In ...