>  기사  >  백엔드 개발  >  이 Python 코드는 왜 소수만 계산하고 인쇄하지 않습니까?

이 Python 코드는 왜 소수만 계산하고 인쇄하지 않습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-11 11:18:03650검색

Why is this Python code only counting prime numbers but not printing them?

Python의 간단한 소수 생성기

이 코드는 간단한 소수 목록을 생성하는 것을 목표로 하지만 현재는 개수만 인쇄하고 있습니다. , 숫자가 소수인지 여부에 관계없이

문제

코드는 중첩 루프를 사용하여 2부터 개수의 제곱근까지의 숫자로 카운터(개수)를 나눌 수 있는지 확인합니다. 그러나 내부 루프의 현재 반복으로 숫자를 나눌 수 없는 경우 소수여야 한다고 잘못 가정합니다.

수정 방법

이 문제를 해결하려면 , count의 소수 상태를 추적하기 위해 부울 변수 isprime을 도입합니다. 내부 루프 내에서 count를 현재 x 값으로 나눌 수 있으면 isprime을 False로 설정하고 루프를 중단합니다. 이렇게 하면 실제로 소수인 경우에만 개수를 인쇄할 수 있습니다.

최적화된 구현

이 코드는 소수 세대에 대한 기본적인 이해를 제공하지만 다음과 같은 보다 효율적인 접근 방식을 제공합니다. 에라토스테네스의 체를 사용할 수 있습니다. 이 기술은 모든 숫자가 소수라고 가정하여 시작한 다음 시퀀스를 반복하여 소수가 아닌 숫자를 합성수로 표시합니다.

다음은 고도로 최적화된 에라토스테네스의 체 구현입니다.

def gen_primes():
    D = {}
    
    q = 2
    
    while True:
        if q not in D:
            yield q
            D[q * q] = [q]
        else:
            for p in D[q]:
                D.setdefault(p + q, []).append(p)
            del D[q]
        
        q += 1

이것은 코드는 소수를 생성하는 생성기를 반환합니다. 메모리 효율적인 매핑 시스템을 사용하여 합성물과 해당 증인을 추적합니다. 이러한 최적화를 통해 큰 소수를 생성하는 데 필요한 시간과 계산 리소스가 크게 줄어듭니다.

위 내용은 이 Python 코드는 왜 소수만 계산하고 인쇄하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.