2016-08-16 3 views
1

모두! 최근에 저는 lucas lehmer 테스트 방법을 사용하여 mercende 소수 프로듀서/생성기를 만들려고했습니다. 코드는 처음 4 자리 숫자에 대해 작동 한 다음 나머지는 실패합니다. 어떤 제안? 감사!mercende 소수 번호 생성기로 잘못된 대답을 얻으십시오.

var totalPrimes = Math.floor(prompt("What would you like the upper limit of 
            our search for primes to be?")); 
for (var i = 2; i < totalPrimes; i++) { 
    var lucasNum = 4; 
    var curNumber = (Math.pow(2, (i+1))-1); 
    for (var x = 0; i-1 > x; x++) { 
     if (lucasNum/curNumber > 1) { 
      lucasNum = (Math.pow(lucasNum, 2)-2); 
     } else { 
      lucasNum = (Math.pow(lucasNum, 2)-2); 
     } 
    } 
    if (lucasNum % curNumber === 0) { 
     console.log("The number " + curNumber + " is prime"); 
    } else { 
     console.log("The number " + curNumber + " is not prime"); 
    } 
} 
+1

구현하려는 코드는 무엇입니까? 그 중 하나를 반영하는 루카스 리머 알고리즘을 찾지 못했습니다. – 4castle

+0

나는 시도하기 시작하는 문제로서, 내 자신의 코드를 만들려고했다. 감사! –

+0

먼저 검증 된 작동 알고리즘을 만듭니다. 이것은 수학 사이트가 아닙니다. – 4castle

답변

0

자바 스크립트 번호의 가수 (또는 유효 숫자)는 53 비트입니다. 따라서, 전 정밀도에 저장 될 수있는 가장 큰 정수는 다음과 같습니다

2^53 - 1 = 9007199254740991 = Number.MAX_SAFE_INTEGER 

(당신은 자세한 내용은 this page을 읽을 수 있습니다.)

귀하의 알고리즘은 매우 신속하게이 제한을 칠 가능성이 높다. 정밀도 폭발은 다음 문장 내에서 발생합니다.

lucasNum = (Math.pow(lucasNum, 2)-2); 

이것은 루프에 포함되어 있습니다.

+0

감사합니다! 매우 도움이된다! –