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 调用本地exe的例子(支持IE内核的浏览器)
Dec 26 Javascript
jquery插件开发之实现jquery手风琴功能分享
Mar 10 Javascript
js对象内部访问this修饰的成员函数示例
Apr 27 Javascript
跟我学习javascript的this关键字
May 28 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
Feb 14 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
Apr 29 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
vue使用watch 观察路由变化,重新获取内容
Mar 08 Javascript
js 去掉字符串前后空格实现代码集合
Mar 25 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
解决vue 单文件组件中样式加载问题
Apr 24 Javascript
js实现超级玛丽小游戏
Mar 18 Javascript
基于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
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
PHP Cookie学习笔记
2016/08/23 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
js select常用操作控制代码
2010/03/16 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
详解Python中的多线程编程
2015/04/09 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Sublime开发python程序的示例代码
2018/01/24 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
python正则-re的用法详解
2019/07/28 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
美术专业自荐信
2014/07/07 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers