3. Całe zadanie: sito i liczby w wyniki3.txt
Matura próbna grudzień 2022 - Matura z informatyki: arkusze krok po kroku (Python)
Pełne rozwiązanie zadań 3.2-3.4 jednym programem na pliku `liczby.txt`.
def sieve(n):
is_prime = [True] * (n + 1) # indeks = liczba
is_prime[0] = is_prime[1] = False
i = 2
while i * i <= n: # wystarczy do pierwiastka: mniejsze wielokrotności skreśliły mniejsze i
if is_prime[i]:
j = i * i # mniejsze wielokrotności i są już skreślone
while j <= n:
is_prime[j] = False
j = j + i
i = i + 1
return is_prime
with open("liczby.txt") as f:
numbers = [int(line) for line in f] # liczby parzyste z [4, 1 000 000]
is_prime = sieve(max(numbers))
# 3.2 x - 1 pierwsza: odczyt z tablicy sita zamiast sprawdzania dzielników
before_prime = sum(1 for x in numbers if is_prime[x - 1])
# 3.3 rozkłady x = p + q z p <= q: wystarczy p do połowy x, q = x - p
primes = [p for p in range(2, len(is_prime)) if is_prime[p]]
ways = {}
for x in numbers:
count = 0
for p in primes:
if p > x // 2:
break
if is_prime[x - p]:
count = count + 1
ways[x] = count
most = max(numbers, key=lambda x: ways[x])
fewest = min(numbers, key=lambda x: ways[x])
# 3.4 format(x, "X") to zapis szesnastkowy wielkimi literami
digits = {d: 0 for d in "0123456789ABCDEF"}
for x in numbers:
for d in format(x, "X"):
digits[d] += 1
with open("wyniki3.txt", "w", encoding="utf-8") as out:
print("3.2", before_prime, file=out)
print("3.3", most, ways[most], fewest, ways[fewest], file=out)
print("3.4", file=out)
for d, n in digits.items():
print(f"{d}:{n}", file=out)
print(open("wyniki3.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.