4. Całe zadanie: liczby pierwsze w wyniki4.txt

Matura maj 2024 - Matura z informatyki: arkusze krok po kroku (Python)

Pełne rozwiązanie zadań 4.1-4.4 jednym programem na pliku `liczby.txt`, z odpowiedziami w jednym pliku `wyniki4.txt`.

with open("liczby.txt") as f:
    first = [int(x) for x in f.readline().split()]  # pierwszy wiersz: liczby pierwsze
    second = [int(x) for x in f.readline().split()]  # drugi wiersz: 20 liczb

# 4.1 liczby z pierwszego wiersza, które dzielą którąkolwiek liczbę z drugiego
dividers = sum(1 for p in first if any(x % p == 0 for x in second))

# 4.2 sto pierwsza od największej: po sortowaniu malejąco indeks 100 (liczymy od 0)
hundred_first = sorted(first, reverse=True)[100]

# 4.3 ile razy każda liczba pierwsza występuje w pierwszym wierszu
count = {}
for p in first:
    count[p] = count.get(p, 0) + 1


def product_of_first(x):
    # dzielimy przez każdą dostępną liczbę pierwszą, ale nie częściej, niż ona występuje
    for p, available in count.items():
        used = 0
        while x % p == 0:
            x = x // p
            used = used + 1
        if used > available:
            return False
    return x == 1  # zostało 1: cały iloczyn złożony z liczb z pierwszego wiersza


products = [x for x in second if product_of_first(x)]

# 4.4 sumy prefiksowe: suma fragmentu first[i:i + length] = prefix[i + length] - prefix[i]
prefix = [0]
for x in first:
    prefix.append(prefix[-1] + x)
best = (0, 0, 0)  # (średnia, liczba elementów, pierwszy element)
for i in range(len(first)):
    # fragment dłuższy niż 99 dzieli się na dwa po co najmniej 50 elementów i jeden z nich ma
    # średnią nie mniejszą, więc wystarczą długości od 50 do 99
    for length in range(50, 100):
        if i + length > len(first):
            break
        average = (prefix[i + length] - prefix[i]) / length
        if average > best[0]:  # ">" zostawia pierwszy w pliku z równych
            best = (average, length, first[i])

with open("wyniki4.txt", "w", encoding="utf-8") as out:
    print("4.1", dividers, file=out)
    print("4.2", hundred_first, file=out)
    print("4.3", *products, file=out)
    print("4.4", *best, file=out)

print(open("wyniki4.txt", encoding="utf-8").read())

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Matura z informatyki: arkusze krok po kroku·Zaloguj się, aby zapisać postęp na koncie.