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 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Nov 24 Javascript
js 加载时自动调整图片大小
May 28 Javascript
js控制浏览器全屏示例代码
Feb 20 Javascript
JSON取值前判断
Dec 23 Javascript
js给网页加上背景音乐及选择音效的方法
Mar 03 Javascript
JavaScript中push(),join() 函数 实例详解
Sep 06 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
Aug 28 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
Sep 04 Javascript
Vue-input框checkbox强制刷新问题
Apr 18 Javascript
angular多语言配置详解
May 16 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
基于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
php2html php生成静态页函数
2008/12/08 PHP
php 方便水印和缩略图的图形类
2009/05/21 PHP
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
使用Python抓取模板之家的CSS模板
2015/03/16 Python
python实现的简单文本类游戏实例
2015/04/28 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Python单链表原理与实现方法详解
2020/02/22 Python
Python多进程编程常用方法解析
2020/03/26 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
自考毕业生自我鉴定
2013/11/04 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
大学生自荐材料范文
2014/12/30 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏