자바스크립트에서 Emrips 안티프라임 열거를 구현하는 방법

亚连
풀어 주다: 2018-06-22 14:33:06
원래의
1496명이 탐색했습니다.

아래 편집기는 JavaScript에서 Emrips 반소수 열거형을 구현하기 위한 샘플 코드를 공유할 것입니다. 이는 좋은 참조 값을 가지고 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집자를 따라가서 살펴볼까요

오늘은 "emirps"의 개념을 제안한 kata를 봤습니다. 소수가 반전된 후에 다른 소수가 얻어지는 것을 "emirps"라고 합니다.

예: 13,17은 소수이고, 31,71도 소수이며, 13과 17은 "emirps"입니다. 그러나 소수 757,787,797은 회문 소수입니다. 즉, 반전된 숫자가 원래 숫자와 동일하므로 "에미르프"로 간주되지 않습니다.

질문에서는 양의 정수 n을 입력하고 n보다 작은 "emirps" 수, 가장 큰 "emirps", n보다 작은 모든 "emirps"의 합을 반환하는 함수를 작성해야 합니다.

문제 해결 방법은 먼저 n보다 작은 소수를 모두 열거한 다음, 역순으로 회문 소수와 합성수인 숫자를 제거하는 것입니다.

먼저 소수를 결정하는 함수를 작성하세요

주로 세 가지 수학적 결론에 기초합니다.

모든 합성수는 여러 소수의 산물입니다

숫자를 인수분해할 수 있으면 2개입니다. 인수는 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 => (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(&#39;&#39;).reverse().join(&#39;&#39;))
  
 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 [
  &#39;n为:&#39; + n,
  &#39;数量为:&#39; + emirpGroup.length,
  &#39;最大数:&#39; + emirpGroup[emirpGroup.length - 1],
  &#39;求和:&#39; + emirpGroup.reduce(function(total,current){
   return total + current;
  })
 ]
}
로그인 후 복사

출력 결과 및 시간을 살펴보세요

n=1000000:

n=10000000:

위 내용은 제가 모두를 위해 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련 기사:

Javascript를 사용하여 맞춤 이벤트 메커니즘을 구현하는 방법

Javascript에서 지도 데이터 구조의 자세한 해석

Javascript를 사용하여 2차원 주간 보기 달력을 개발하는 방법

JS 추상 팩토리 패턴 정보(자세한 튜토리얼)

Django와 Vue 구문 간의 충돌을 해결하는 방법

위 내용은 자바스크립트에서 Emrips 안티프라임 열거를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿