0977- Numere5

De la Universitas MediaWiki

Enunt

Se generează un şir de numere naturale ai cărui primi termeni sunt, în această ordine:

1, 2, 3, 5, 8, 3, 1, 4, 5, 9, 4, 3, 7, 0, 7, 7, 4,...

Cerințe

Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale n, k şi p şi care să determine:

a) suma tuturor numerelor prime aflate printre primii n termeni ai şirului din enunţ;
b) numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ;
c) cel de-al p-lea termen al şirului din enunţ.

Date de intrare

Programul citește de la tastatură cele trei numere naturale n, k şi p.

Date de ieșire

Programul va afișa pe ecran, în această ordine:

  • un număr natural reprezentând suma tuturor numerelor prime aflate printre primii n termeni ai şirului din enunţ
  • numărul de apariţii ale cifrei k printre primii n termeni ai şirului din enunţ
  • cel de-al p-lea termen al şirului din enunţ

Restricții și precizări

  • Numerele n, k si p sunt naturale
  • 3 ⩽ n ⩽ 100
  • 0 ⩽ k ⩽ 9
  • 1 ⩽ p ⩽ 2000000000
  • pentru rezolvarea cerinţei a) se acordă 40% din punctaj, pentru cerinţa b) 20% din punctaj şi pentru cerinţa c) 40% din punctaj.

Exemplu 1

Intrare
19 5 26
Iesire
47
3
8


Exemplu 2

Intrare
-1 -3 2
Ieșire
Nu au fost respectate cerintele impuse.


Rezolvare

#0977 - Numere5
def validate_constraints(n, k, p):
    if not (3 <= n <= 100 and 0 <= k <= 9 and 1 <= p <= 2000000000):
        print("Nu au fost respectate cerintele impuse.")
        return False
    return True

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            return False
    return True

def sum_of_primes_in_sequence(n, sequence):
    primes_sum = 0
    for i in range(n):
        if is_prime(sequence[i]):
            primes_sum += sequence[i]
    return primes_sum

def count_digit_k_in_sequence(n, k, sequence):
    digit_count = 0
    for i in range(n):
        digit_count += str(sequence[i]).count(str(k))
    return digit_count

def find_pth_term(p):
    a, b = 1, 2
    for _ in range(p - 2):
        a, b = b, (a + b) % 10
    return b

# Citire date de intrare
n, k, p = map(int, input("Introduceti valorile pentru n, k si p: ").split())

# Verificare restricții
if not validate_constraints(n, k, p):
    exit()

# Construirea șirului
sequence = [1, 2]
for _ in range(2, n):
    sequence.append((sequence[-1] + sequence[-2]) % 10)

# Calculul rezultatelor
result_a = sum_of_primes_in_sequence(n, sequence)
result_b = count_digit_k_in_sequence(n, k, sequence)
result_c = find_pth_term(p)

# Afisarea rezultatelor
print(result_a)
print(result_b)
print(result_c)

Explicatie

Programul verifica datele intoduse pentru a fi siguri ca numerele corespund restrictiilor. Cu ajutorul unor functii se calculeaza valorile cerute iar mai apoi se afiseaza rezultatele.