0977- Numere5
Enunt[edit | edit source]
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[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură cele trei numere naturale n, k şi p.
Date de ieșire[edit | edit source]
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[edit | edit source]
- 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[edit | edit source]
- Intrare
- 19 5 26
- Iesire
- 47
- 3
- 8
Exemplu 2[edit | edit source]
- Intrare
- -1 -3 2
- Ieșire
- Nu au fost respectate cerintele impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 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)
</syntaxhighlight>
Explicatie[edit | edit source]
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.