잘못된 소수 탐지기 디버깅
long 변수로 정의된 범위 내에서 소수를 식별하도록 설계된 프로그램이 출력을 생성하지 못합니다. 코드를 분석한 결과 두 가지 중요한 결함이 드러났습니다.
prime_num()
함수 내의 내부 루프에 결함이 있는 조건(i
)이 포함되어 무한 루프가 발생합니다.if (i != j && i % j == 0)
조건은 추가 제수가 있는 숫자를 소수로 잘못 분류합니다.향상된 소수 찾기 알고리즘
보다 효율적인 솔루션은 "시험 분할 체" 방법을 사용합니다.
<code class="language-csharp">Enumerable.Range(0, Math.Floor(2.52*Math.Sqrt(num)/Math.Log(num))).Aggregate( Enumerable.Range(2, num-1).ToList(), (result, index) => { var bp = result[index]; var sqr = bp * bp; result.RemoveAll(i => i >= sqr && i % bp == 0); return result; } );</code>
이 개선된 알고리즘은 근사치를 사용하여 테스트되는 주요 후보 수를 최소화하므로 성능이 크게 향상됩니다.
위 내용은 소수 탐지 프로그램이 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!