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.