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为空或不是对象问题的快速解决方法
Dec 11 Javascript
javascript使用数组的push方法完成快速排序
Sep 15 Javascript
分享一则JavaScript滚动条插件源码
Mar 03 Javascript
JS控制网页动态生成任意行列数表格的方法
Mar 09 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
Dec 23 Javascript
Vue数据驱动模拟实现1
Jan 11 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
Mar 01 Javascript
微信小程序左右滑动的实现代码
Dec 15 Javascript
微信小程序实现滑动切换自定义页码的方法分析
Dec 29 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 Javascript
详解小程序input框失焦事件在提交事件前的处理
May 05 Javascript
微信小程序实现星级评价
Nov 20 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
编码实现字符串转整型的函数
2012/06/02 面试题
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
教师自荐信范文
2015/03/06 职场文书
安全第一课观后感
2015/06/18 职场文书
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
mysql的单列多值存储实例详解
2022/04/05 MySQL
Java 多线程协作作业之信号同步
2022/05/11 Java/Android