0977- Numere5

From Bitnami 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

<syntaxhighlight lang="python" line>

  1. 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
  1. Citire date de intrare

n, k, p = map(int, input("Introduceti valorile pentru n, k si p: ").split())

  1. Verificare restricții

if not validate_constraints(n, k, p):

   exit()
  1. Construirea șirului

sequence = [1, 2] for _ in range(2, n):

   sequence.append((sequence[-1] + sequence[-2]) % 10)
  1. 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)

  1. Afisarea rezultatelor

print(result_a) print(result_b) print(result_c)


</syntaxhighlight>

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.