Skip to main content

Command Palette

Search for a command to run...

Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.3

Updated
2 min read
Matura informatyka 2022 czerwiec (poziom rozszerzony) - zadanie 4.3

Treść zadania:

Wypisz wszystkie liczby pierwsze z pliku liczby.txt, których odbicia również są liczbami pierwszymi, każdą w oddzielnym wierszu.

Dla pliku przyklad.txt odpowiedź to:

13

131

(odbiciem liczby 13 jest 31 – obie są liczbami pierwszymi, odbiciem 131 jest 131)

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 :)

Następnie dla każdej odczytanej liczby sprawdzamy, czy jest ona i jej odbicie liczbą pierwszą - jeśli tak - wypisujemy ją :)


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

for num in nums:
    reflection = int(str(num)[::-1])
    if is_prime(num) and is_prime(reflection):
        print(num)

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 f:
    nums = [int(num) for num in f.readlines()]

for num in nums:
    reflection = int(str(num)[::-1])
    if is_prime(num) and is_prime(reflection):
        print(num)

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

More from this blog

matura z infy

17 posts