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/




