Skip to main content

Command Palette

Search for a command to run...

Matura próbna informatyka 2022 grudzień (poziom rozszerzony) - zadanie 3.2

Updated
2 min read
Matura próbna informatyka 2022 grudzień (poziom rozszerzony) - zadanie 3.2

Treść zadania:

Dla każdej liczby x z pliku liczby.txt sprawdź, czy liczba x – 1 jest liczbą pierwszą. Podaj, ile liczb z pliku liczby.txt po pomniejszeniu o 1 daje liczbę pierwszą.

Dla pliku liczby_przyklad.txt odpowiedzią jest 94.

Rozwiązanie:

Na początku zdefiniujmy funkcję, która powie nam, czy dana funkcja jest liczbą pierwszą. Liczba pierwsza , jest liczbą naturalną większą od 1 oraz dzieli się przez 1 i samą siebie.

def is_prime(n: int) -> bool:
    if n < 2:
        return False

    range_limit = int(sqrt(n)) + 1

    for i in range(2, range_limit):
        if n % i == 0:
            return False
    return True

Nie ma sensu szukać zatem liczby pierwszej w zbiorze liczb mniejszych od 2. Zakładam, że do funkcji zostanie podana tylko liczba naturalna. Szukanie dzielnika liczby można ograniczyć do zakresu pierwiastka kwadratowego +1 - dla pewności :)

with open("dane/liczby.txt", "r") as file:
    nums = [int(n) for n in file.readlines()]

Następnie otwieramy plik z danymi i każdy wiersz przekształcamy na int.

total = 0

for num in nums:
    if is_prime(num - 1):
        total += 1

print(total)

Zostaje nam tylko zliczyć, ile liczb, od których zostało odjęte 1, jest liczbami pierwszymi!

Cały program:

from math import sqrt


def is_prime(n: int) -> bool:
    if n < 2:
        return False

    range_limit = int(sqrt(n)) + 1

    for i in range(2, range_limit):
        if n % i == 0:
            return False
    return True


with open("dane/liczby.txt", "r") as file:
    nums = [int(n) for n in file.readlines()]

total = 0

for num in nums:
    if is_prime(num - 1):
        total += 1

print(total)

Wynik:

21 liczb - uruchom program poniżej!

Źródło arkusza: https://arkusze.pl/matura-probna-informatyka-2022-grudzien-poziom-rozszerzony/

More from this blog

matura z infy

17 posts