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 相关文章推荐
jQuery 1.0.2
Oct 11 Javascript
JavaScript实现Sleep函数的代码
Mar 04 Javascript
JavaScript中的事件处理
Jan 16 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
javascript不可用的问题探究
Oct 01 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
浅谈javascript的闭包
Jan 23 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
VsCode新建VueJs项目的详细步骤
Sep 23 Javascript
vue使用vuex实现首页导航切换不同路由的方法
May 08 Javascript
如何检测JavaScript中的死循环示例详解
Aug 30 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使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
php数组键名技巧小结
2015/02/17 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
js读取cookie方法总结
2014/10/31 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
一份python入门应该看的学习资料
2018/04/11 Python
python实现黑客字幕雨效果
2018/06/21 Python
微信公众号token验证失败解决方案
2019/07/22 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
python数值基础知识浅析
2019/11/19 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
最新教师自我评价分享
2013/11/12 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
求职自我评价范文100字
2014/09/23 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL