JavaScript实现Emrips反质数枚举的示例代码

作者:拾光

时间:2026-10-22

浏览:230

本文介绍如何使用JavaScript实现Emrips反质数的枚举。Emrips指倒转后仍为不同质数的质数。文章详细解析了基于6X±1形式的质数判断优化算法,通过剔除回文质数和非质数反转值,高效计算小于指定数值n的Emrips个数、最大值及总和。

文章目录

Emrips反质数定义与问题描述

近期遇到一个编程挑战,其中定义了一种名为“emirps”的数:若一个质数在数字反转后得到的结果是一个与原数不同的质数,则该数被称为“emirps”。

以13和17为例,它们本身是质数,其反转数31和71也是质数,因此13和17属于“emirps”。然而,像757、787和797这样的回文质数,其反转后与原数相同,因此不被归类为“emirps”。

该编程任务要求编写一个函数,接收一个正整数n作为输入,返回小于n的“emirps”的数量、其中的最大“emirps”值,以及所有小于n的“emirps”之和。

解决此问题的基本思路是:首先枚举出所有小于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)。这些形式均含有除1和自身外的因数,因此肯定不是质数。由此可证,质数只能表现为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;
}

Emrips过滤与结果统计

接下来,需要剔除回文质数以及反转后为合数的数字。

相关过滤逻辑的代码如下:


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时的运行结果:

Emrips反质数定义与问题描述

当n=10000000时的运行结果:

Emrips反质数定义与问题描述

以上关于使用JavaScript实现Emrips反质数枚举的示例代码即为全部内容,希望能为读者提供参考与帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章