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 相关文章推荐
JS在IE和FF下attachEvent,addEventListener学习笔记
Nov 26 Javascript
使用jquery实现图文切换效果另加特效
Jan 20 Javascript
javascript 手动给表增加数据的小例子
Jul 10 Javascript
C#中使用迭代器处理等待任务
Jul 13 Javascript
Bootstrap每天必学之折叠(Collapse)插件
Apr 25 Javascript
HTML页面,测试JS对C函数的调用简单实例
Aug 09 Javascript
基于原生js淡入淡出函数封装(兼容IE)
Oct 20 Javascript
vue实现图书管理demo详解
Oct 17 Javascript
js实现图片粘贴上传到服务器并展示的实例
Nov 08 Javascript
深入了解响应式React Native Echarts组件
May 29 Javascript
Webpack设置环境变量的一些误区详解
Dec 19 Javascript
javascript canvas实现雨滴效果
Jun 09 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学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
原生js调用json方法总结
2018/02/22 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
Vue实现验证码功能
2019/12/03 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
Python解析json文件相关知识学习
2016/03/01 Python
分析Python读取文件时的路径问题
2018/02/11 Python
python中的数据结构比较
2019/05/13 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
如何在django中实现分页功能
2020/04/22 Python
pandas分批读取大数据集教程
2020/06/06 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
PHP经典面试题
2016/09/03 面试题
应征英语教师求职信
2013/11/27 职场文书
转预备党员政审材料
2014/02/06 职场文书
个人工作表现评语
2014/04/30 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
运动会主持词大全
2015/07/02 职场文书
诉讼和解协议书
2016/03/23 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android