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 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
地震发生中逃生十大法则
May 12 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 Javascript
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
一个JavaScript操作元素定位元素的实例
Oct 29 Javascript
jquery中checkbox全选失效的解决方法
Dec 26 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
Jun 18 Javascript
探究Vue.js 2.0新增的虚拟DOM
Oct 20 Javascript
JavaScript中清空数组的方法总结
Dec 02 Javascript
解决修复npm安装全局模块权限的问题
May 17 Javascript
JavaScript面向对象程序设计创建对象的方法分析
Aug 13 Javascript
微信小程序的引导页实现代码
Jun 24 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中文字符串截取函数
2013/11/12 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python实现基本进制转换的方法
2015/07/11 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
深入分析python 排序
2020/08/24 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
一分钟演讲稿
2014/04/30 职场文书
学校与家长安全责任书
2014/07/23 职场文书
单位授权委托书范文
2014/08/02 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
工作简报范文
2015/07/21 职场文书
新闻报道稿范文
2015/07/23 职场文书
导游词之河北野三坡
2019/12/11 职场文书
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
python运行脚本文件的三种方法实例
2022/06/25 Python