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/




