Rozwiązanie
Zadanie 4.3 – matura 2019, czerwiec

Zadanie 4.3 (0-4)

Wybrane liczby
Wybrane liczby
Liczby pierwsze to liczby naturalne większe od 1, które mają dokładnie dwa dzielniki: jedynkę i samą siebie.
Dane są dwa pliki: liczby.txt i pierwsze.txt. Plik liczby.txt zawiera 300 wierszy. W każdym wierszu tego pliku znajduje się jedna liczba całkowita dodatnia z zakresu od 1 do 100 000.
Plik pierwsze.txt zawiera 200 wierszy. W każdym wierszu tego pliku znajduje się jedna liczba pierwsza z zakresu od 10 do 1 300 000.
Uwaga: pomocnicze pliki liczby_przyklad.txt i pierwsze_przyklad.txt, zawierają dane, które możesz wykorzystać, aby sprawdzić poprawność działania swojego(-ich) programu(-ów). Każdy z nich zawiera po 50 wierszy. W każdym wierszu znajduje się jedna liczba. Odpowiedzi dla danych z tych plików są podane pod treściami zadań.
Napisz program(-y), w wyniku działania którego(-ych) otrzymasz odpowiedzi do poniższych zadań. Pliki źródłowe z rozwiązaniem zapisz pod nazwą zgodną z numerem zadania, z rozszerzeniem odpowiadającym użytemu językowi programowania. Niech w(N) oznacza sumę cyfr liczby N. Dla danej liczby N tworzymy ciąg, w którym N₁ = w(N), a każdy kolejny element jest sumą cyfr występujących w poprzednim elemencie:
N₁ = w(N)
N₂ = W(N₁)
N₃ = W(N₂)
Ciąg kończy się, gdy jego wyraz jest liczbą jednocyfrową. Tę liczbę nazywamy wagą liczby N.
Przykład 1.
Niech N=1109
N₁=1+1+0+9=1109
N₂=1+1=2
Zatem waga liczby jest równa 2.

Przykład 2.
Niech N=31699
N₁=3+1+6+9+9=28
N₂=2+8=10
N₃=1+0=1
Zatem waga liczby jest równa 1.
Podaj, ile jest liczb w pliku pierwsze.txt, których waga jest równa 1. Odpowiedź zapisz
w pliku wyniki4_3.txt.
Prawidłowa odpowiedź dla pliku pierwsze_przyklad.txt: 6 liczb.
Rozwiązanie zadań w Pythonie:

with open("MIN-R2A1P-193_dane/pierwsze.txt") as f:
    primes_lines = [line.strip() for line in f.readlines()]
    primes = [int(line) for line in primes_lines]

print("4.3")
def weight(n):
    if len(str(n)) == 1:
        return n
    new_n = sum([int(char) for char in str(n)])
    return weight(new_n)

weights_one = 0
for prime in primes:
    if weight(prime) == 1:
        weights_one += 1
print(weights_one)
Pobierz rozwiązanie
Wyszukaj więcej zadań z tego arkusza...