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.