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中校验时间格式的正则表达式小结
Sep 22 Javascript
用jquery等比例控制图片宽高的具体实现
Jan 28 Javascript
多种方法实现load加载完成后把图片一次性显示出来
Feb 19 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
Jquery实现textarea根据文本内容自适应高度
Apr 03 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
react native 文字轮播的实现示例
Jul 27 Javascript
vue+vue-router转场动画的实例代码
Sep 01 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
Aug 04 Javascript
基于JavaScript实现年月日三级联动
Jun 22 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的五种设计模式
2012/09/05 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
php文件上传的简单实例
2013/10/19 PHP
Yii2中datetime类的使用
2016/12/17 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
JScript的条件编译
2007/05/29 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python找出完数的方法
2018/11/12 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
春节联欢晚会主持词范文
2014/03/24 职场文书
煤矿安全承诺书
2014/05/22 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
学习十八大的感悟
2015/08/11 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
详解 TypeScript 枚举类型
2021/11/02 Javascript
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS