3.2 Liczby o jeden większe od pierwszych w pliku przykładowym

Matura próbna grudzień 2022 - Matura z informatyki: arkusze krok po kroku (Python)

Zadania 3.2-3.4: plik `liczby.txt` ma 100 liczb parzystych z zakresu [4, 1 000 000], a `liczby_przyklad.txt` tyle samo liczb z odpowiedziami w poleceniach. Sito liczy się raz, do największej liczby z pliku, a sprawdzenie pierwszości to odczyt `is_prime[x]`. Zadanie 3.2 (2 pkt): ile liczb \( x \) z pliku daje liczbę pierwszą \( x - 1 \). Dla pliku przykładowego: 94.

def sieve(n):
    is_prime = [True] * (n + 1)  # indeks = liczba
    is_prime[0] = is_prime[1] = False
    i = 2
    while i * i <= n:  # wystarczy do pierwiastka: mniejsze wielokrotności skreśliły mniejsze i
        if is_prime[i]:
            j = i * i  # mniejsze wielokrotności i są już skreślone
            while j <= n:
                is_prime[j] = False
                j = j + i
        i = i + 1
    return is_prime


with open("liczby_przyklad.txt") as f:
    numbers = [int(line) for line in f]  # liczby parzyste z [4, 1 000 000]
is_prime = sieve(max(numbers))

# 3.2 x - 1 pierwsza: odczyt z tablicy sita zamiast sprawdzania dzielników
before_prime = sum(1 for x in numbers if is_prime[x - 1])

print("3.2", before_prime)

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Matura z informatyki: arkusze krok po kroku·Zaloguj się, aby zapisać postęp na koncie.