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 중국어 웹사이트의 기타 관련 기사를 참조하세요!