利用JS打印质数
我爱撸码,撸码使我感到快乐!
大家好,我是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打印质数的更多相关文章
- 利用lodop打印控件轻松实现批量打印 (转载http://www.thinkphp.cn/topic/13085.html)
最近在做一个打印程序,要实现批量打印功能,在网上找了很多天,也在tp官网咨询大牛们,对大家的的提议我一一进行了研究,总结如下: 要实现批量打印可以有两个办法: 一是利用专业的报表程序,能实现十分复杂的 ...
- js 打印
关于js打印很简单的一段代码 function doPrint() { var newWindow = window.open("打印窗口", "_blank" ...
- js打印html中的内容
js打印方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- 利用JS脚本通过getAttribute()和setAttribute()等对CSS样式进行操作
HTML中引入CSS样式的方式有三种: 1.最常用的,引入样式表,在样式表中编写样式,引入方式如下:<link href="css/style.css" rel=" ...
- js打印Iframe中的内容,并且不需要预览。
js打印Iframe中的内容,并且不需要预览 js代码如下: <script type="text/javascript" language="Javascript ...
- JS 数据类型转换-转换函数、强制类型转换、利用js变量弱类型转换
1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型 ...
- 利用js制作html table分页示例(js实现分页)
有时候table的列数太长,不利于使用者查询,所以利用JS做了一个table的分页,以下为相关代码 一.JS代码 <script type="text/javascript" ...
- 利用JS实现闪烁字体
以下为在JSP文件中,利用JS实现闪烁字体的代码: HTML代码: <div id="blink">一段会闪烁的字</div> JavaScript代码: ...
- 利用JS实现HTML TABLE的分页
有时候table的列数太长,不利于使用者查询,所以利用JS做了一个table的分页,以下为相关代码 一.JS代码 <script type="text/javascript" ...
随机推荐
- python 接口自动化测试(四)cookie&session
掌握了前面几节的的内容,就可以做一些简单的http协议接口的请求发送了,但是这些还不够.HTTP协议是一个无状态的应用层协议,也就是说前后两次请求是没有任何关系的,那如果我们测试的接口之前有相互依赖关 ...
- windows环境下Oracle数据库冷备份和恢复
1.点击开始菜单的“运行”,输入sqlplus/nolog 2.在弹出的命令行窗口以sysdba身份登陆,要输入:系统用户名/登陆密码@数据库实例名,如sys/testora@orcl 3.输入 al ...
- js 画布与图片的相互转化(canvas与img)
使用js将图片拷贝进画布 //将图片对象转化为画布,返回画布function ImageToCanvas(image) { var canvas = document.createElement(&q ...
- return & finally 执行顺序 这是我读到的最合理的解释
新词:return [expression] 栈顶元素 局部变量的快照 java方法是在栈幀中执行,栈幀是线程私有栈的单位,执行方法的线程会为每一个方法分配一小块栈空间来作为该方法执行时的内存空间, ...
- 文本编辑器vim和gedit
vim和gedit都是文本编辑器 vim用法: vim 文件名 #打开文件 输入 i,进入文本编辑模式,编辑完再按ESC,退出编辑模式,再输:wq,保存退出:如果输:q!则是不保存退出,很简单.. 如 ...
- c 语言 随机数选取6个数 一定范围内
种子来源 定时器/****************** 自动筛选种子 dat 目标种子 ************/ #define max 7 //随机生成最大的数为7 #define min 1 / ...
- Java Web请求和响应机制
1.请求响应流程图 =================== 服务器处理请求的流程: 服务器每次收到请求时,都会为这个请求开辟一个新的线程. 服务器会把客户端的请求数据封装到request对象中,req ...
- Linux sed命令 以行为单位编辑文本,或替换文本中的文字
sed -e 4a\newLine testfile 首先查看testfile中的内容如下: $ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is ...
- RoR - Introduction to Active Record
Active Record: ORM ( Object-relational Mapping)Bridges the gap between relational databases , which ...
- mongodb 3.2 分片 + 副本集
从图中可以看到有四个组件:mongos.config server.shard.replica set. mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加 ...