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 相关文章推荐
javascript 动态参数判空操作
Dec 22 Javascript
javascript简单比较日期大小的方法
Jan 05 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
Bootstrap Img 图片样式(推荐)
Dec 13 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
Dec 27 Javascript
如何学JavaScript?前辈的经验之谈
Dec 28 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
使用p5.js临摹动态图形
Oct 23 Javascript
微信小程序吸底区域适配iPhoneX的实现
Apr 09 Javascript
微信小程序自定义胶囊样式
Dec 27 Javascript
JavaScript使用canvas绘制坐标和线
Apr 28 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
B2K与车机的中波PK
2021/03/02 无线电
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php二维数组转成字符串示例
2014/02/17 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
基于javascript实现简单计算器功能
2016/01/03 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
详解python基础之while循环及if判断
2017/08/24 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
《Python学习手册》学习总结
2018/01/17 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
铁路工务反思材料
2014/02/07 职场文书
跳槽求职信范文
2014/05/26 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
2015年企业新年寄语
2014/12/08 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
个人原因辞职信模板
2015/05/13 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers