Rozwiązanie
Zadanie 4.1 – matura 2020, maj

Pary
W pliku pary.txt znajduje się 100 wierszy. Każdy wiersz zawiera parę danych składającą się z liczby całkowitej z przedziału od 3 do 100 i słowa (ciągu znaków) złożonego z małych liter alfabetu angielskiego o długości od 1 do 50 znaków. Liczba i słowo są oddzielone znakiem spacji.
Napisz program(-my), dający(-e) odpowiedzi do poniższych zadań. Uzyskane odpowiedzi zapisz w pliku wyniki4.txt, poprzedzając każdą z nich numerem odpowiedniego zadania.
Uwaga: plik przyklad.txt zawiera przykładowe dane spełniające warunki zadania.
Odpowiedzi dla danych z pliku przyklad.txt są podane pod treściami zadań oraz w pliku odp_przyklad.txt. Mocna hipoteza Goldbacha mówi, że każda parzysta liczba całkowita większa od 4 jest sumą dwóch nieparzystych liczb pierwszych, np. liczba 20 jest równa sumie 3 + 17 lub sumie 7 + 13.
Każdą liczbę parzystą z pliku pary.txt przedstaw w postaci sumy dwóch liczb pierwszych.
Wypisz tę liczbę oraz dwa składniki sumy w kolejności niemalejącej. Jeżeli istnieje więcej rozwiązań (tak jak dla liczby 20) należy wypisać składniki sumy o największej różnicy.
Wyniki podaj w oddzielnych wierszach, w kolejności zgodnej z kolejnością danych w pliku pary.txt. Liczby w każdym wierszu rozdziel znakiem spacji, np. dla liczby 20 należy wypisać 20 3 17.
Dla danych z pliku przyklad.txt prawidłową odpowiedzią jest:
24 5 19
6 3 3
6 3 3
Rozwiązanie zadań w Pythonie:
lines = ""
with open("Dane_PR2/pary.txt") as f:
    lines = f.readlines()

nums = []
strings = []

for line in lines:
    line.strip()
    num, string = line.split()
    nums.append(int(num))
    strings.append(string)

print("
4.1")
from math import sqrt
prime_nums = []
for num in range(3, 100): # zakres od 3, bo 2 jest liczbą parzystą
    if all(num%i!=0 for i in range(2, int(sqrt(num))+1)):
       prime_nums.append(num)

def is_prime(num):
    return True if num in prime_nums else False

for num in nums:
    if num % 2 == 0:
        for i in range(3, num//2+1): # zakres od 3, bo 2 jest liczbą parzystą, a do num//2+1, ponieważ jeśli sprawdzalibyśmy dalej, to odtwarzalibyśmy sprawdzanie od tyłu
            if is_prime(i) and is_prime(num-i):
                print(num, i, num-i)
                break
Pobierz rozwiązanie
Wytłumaczenie pojawi się niebawem.
Wyszukaj więcej zadań z tego arkusza...