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 相关文章推荐
可以将word转成html的js代码
Apr 11 Javascript
javascript中Object使用详解
Jan 26 Javascript
简介JavaScript中的setHours()方法的使用
Jun 11 Javascript
浅谈window对象的scrollBy()方法
Jul 15 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
js实现异步循环实现代码
Feb 16 Javascript
Bootstrap表格和栅格分页实例详解
May 20 Javascript
Bootstrap面板使用方法
Jan 16 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
使用element-ui table expand展开行实现手风琴效果
Mar 15 Javascript
vue实现输入一位数字转汉字功能
Dec 13 Javascript
JS实现普通轮播图特效
Jan 01 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写的serv-u的web申请账号的程序
2006/10/09 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP对象实例化单例方法
2017/01/19 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
prototype Element学习笔记(Element篇三)
2008/10/26 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
python追加元素到列表的方法
2015/07/28 Python
Python的标准模块包json详解
2017/03/13 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
Python中format()格式输出全解
2019/04/12 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
视图的作用
2014/12/19 面试题
打架检讨书800字
2014/01/10 职场文书
女方回门宴答谢词
2014/01/14 职场文书
《灯光》教学反思
2014/02/08 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
师德师风个人总结
2015/02/06 职场文书
如何拟写通知正文?
2019/04/02 职场文书
JavaScript实现简单拖拽效果
2021/09/15 Javascript
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL