javascript实现Emrips反质数枚举的示例代码


Posted in Javascript onDecember 06, 2017

今天看到一个kata,提出一个“emirps”的概念:一个质数倒转后得到的是一个不同的质数,这个数叫做“emirps”。

例如:13,17是质数,31,71也是质数,13和17是“emirps”。 但是质数757,787,797是回文质数,这意味着反转的数字与原始数字相同,所以它们不被认为是“emirps”。

题目要求写一个函数输入一个正整数n,返回小于n的“emirps”的个数,其中最大“emirps”、以及所有小于n的“emirps”的和。

解题思路为先枚举出所有小于n的质数,然后剔除回文质数以及颠倒后为合数的数。

先写判断质数的函数

主要根据三个数学结论:

所有合数都是若干个质数的乘积

如一个数可以进行因式分解,那么两个因数一定是一个小于等于sqrt(n),一个大于等于sqrt(n)。

所有大于3的质数都是6X+1或者6X-1这种形式,也就是6的倍数的相邻的数,但并不是所有6X+1或者6X-1都是质数。

第一个结论用反证法即可证明

第三个结论证明:

我们把数字都表示为以下形式 6X-1、6X、6X+1、6X+2、6X+3、6X+4 (X为正整数) 6X => 2*3x 6X+2 => 2(3x+1) 6X+3 => 3(2x+1) 6X+4 => 2(3x+2) 可证明这些肯定不为质数,即质数只能为6X-1或者6X-1

代码:

function isPrimeNumber(num){
  
 if(num == 2 || num == 3){
  return true;
 }/*2、3特殊处理*/
  
 if(num % 6 != 1 && num % 6 != 5){
  return false;
 }/*根据结论三排除*/
  
 for(var i=5;i<=Math.sqrt(num);i+=6){
  if(num % i == 0 || num % (i+2) == 0){
   return false;
  }
 }/*根据结论二、结论三排除*/
  
 return true;
}

再剔除回文质数以及颠倒后为合数的数

代码:

function emirpNumber(num){
 
 var reverseNumber = Number(String(num).split('').reverse().join(''))
  
 if(reverseNumber != num && isPrimeNumber(reverseNumber)){
  return true;
 }
 else{
  return false;
 }
}

最后输出想要的结果

代码:

function findEmirp(n){
 
 var emirpGroup = [];
 
 for(var i=1;i<n;i++){
  if(isPrimeNumber(i) && emirpNumber(i)){
   emirpGroup.push(i);   
  }
 }
  
 return [
  'n为:' + n,
  '数量为:' + emirpGroup.length,
  '最大数:' + emirpGroup[emirpGroup.length - 1],
  '求和:' + emirpGroup.reduce(function(total,current){
   return total + current;
  })
 ]
}

看一下输出结果和用时

n=1000000:

javascript实现Emrips反质数枚举的示例代码

n=10000000:

javascript实现Emrips反质数枚举的示例代码

以上这篇javascript实现Emrips反质数枚举的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js得到网页中所有的div的id
Oct 19 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
Apr 27 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
微信小程序 label 组件详解及简单实例
Jan 10 Javascript
jquery横向纵向鼠标滚轮全屏切换
Feb 27 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
Jul 04 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
微信小程序制作扭蛋机代码实例
Sep 24 Javascript
解决Vue动态加载本地图片问题
Oct 09 Javascript
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 #jQuery
JS实现登录页密码的显示和隐藏功能
Dec 06 #Javascript
微信小程序 scroll-view实现锚点滑动的示例
Dec 06 #Javascript
基于Vue制作组织架构树组件
Dec 06 #Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
Dec 06 #Javascript
如何重置vue打印变量的显示方式
Dec 06 #Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 #Javascript
You might like
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
jquery显示和隐藏div特效实例
2013/02/27 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
使用PYTHON创建XML文档
2012/03/01 Python
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
如何在Python中编写并发程序
2016/02/27 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
python 输出所有大小写字母的方法
2019/01/02 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python selenium 弹出框处理的实现
2019/02/26 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
应届生法律顾问求职信
2013/11/19 职场文书
物流合作计划书
2014/01/10 职场文书
项目经理任命书
2014/06/04 职场文书
三人合伙协议书范本
2014/10/29 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
什么是SOLID
2022/03/24 Javascript