>백엔드 개발 >Golang >에라토스테네스의 체: '교차' 단계 가속화

에라토스테네스의 체: '교차' 단계 가속화

王林
王林앞으로
2024-02-09 12:36:09567검색

에라토스테네스의 체: 교차 단계 가속화

php 편집기 Apple에서 소수를 빠르게 계산하는 알고리즘인 에라토스테네스의 체를 소개합니다. 이 알고리즘은 소수가 아닌 숫자의 배수를 지속적으로 제외하여 모든 소수를 선별합니다. 소수를 하나씩 판단하는 전통적인 방법에 비해 에라토스테네스의 체 방법은 계산 속도를 크게 높일 수 있습니다. 핵심 아이디어는 2에서 n까지 순회하여 순회가 완료될 때까지 소수 p의 각 배수를 소수가 아닌 숫자로 표시하는 것입니다. 이 방법은 많은 수의 소수를 계산할 때 잘 수행되며 효율적인 소수 계산 알고리즘입니다.

질문 내용

에라토스테네스의 체 알고리즘을 사용하여 소수를 나열하는 함수를 다음과 같이 구현했습니다.

으아악

하지만 저는 이것이 비효율적이라고 생각했습니다. 즉, CrossOffMultiples 被调用的次数超出了必要的次数。 IOW,已经被“划掉”的整数将被划掉第二次或第三次(甚至更多次),因为任何多个 m 将有多个因素来划分它。但我似乎无法弄清楚如何利用这一点信息以允许我减少调用 CrossOffMultiples배. 이 작업을 수행할 수 있는 방법이 있다고 확신하지만 어떤 이유로 인해 그렇게 할 수 없습니다.

제안사항이 있나요?

해결책

줄이면 CrossOffMultiples 被调用的次数,即,您不对某些素数 p 调用它,则 p * p 不会被划掉。但你可以做的是从 p * p 而不是 2 * p사이클을 시작하세요.

숫자를 여러 번 지우는 것은 정상적인 현상입니다. 에라토스테네스의 체는 이렇게 했습니다. Linear Sieve Method는 여러분이 관심을 가질 만한 유사한 알고리즘입니다. p>

위 내용은 에라토스테네스의 체: '교차' 단계 가속화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제