아래 편집기는 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('').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:
n=10000000:
위 내용은 제가 모두를 위해 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.
관련 기사:
Javascript를 사용하여 맞춤 이벤트 메커니즘을 구현하는 방법
Javascript에서 지도 데이터 구조의 자세한 해석
Javascript를 사용하여 2차원 주간 보기 달력을 개발하는 방법
위 내용은 자바스크립트에서 Emrips 안티프라임 열거를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!