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的12招常用技巧分享
Aug 08 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 Javascript
javascript之typeof、instanceof操作符使用探讨
May 19 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
Nov 25 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
Apr 06 Javascript
JS数组排序方法实例分析
Dec 16 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
js上传图片预览的实现方法
May 09 Javascript
基于Vue实现图书管理功能
Oct 17 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
基于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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
PHP 日常开发小技巧
2009/09/23 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
js 函数的副作用分析
2011/08/23 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
python正则表达式的使用
2017/06/12 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
django 自定义过滤器的实现
2019/02/26 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
python 内置函数汇总详解
2019/09/16 Python
使用python实现画AR模型时序图
2019/11/20 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
C语言笔试集
2012/07/24 面试题
《小小雨点》教学反思
2014/02/18 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL