1827 – Vector Sum Prim
Sursa: VectorSumPrim
Cerinţă[edit | edit source]
Se dă un șir cu n
elemente întregi. Să se afișeze suma elementelor prime din șir.
Date de intrare[edit | edit source]
Programul va citi de la tastatură n
, reprezentând numărul de elemente ale șirului, apoi n
numere întregi reprezentând elementele șirului.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se va afișa suma elementelor prime, dacă nu există, se va afișa mesajul "Nu există numere prime!". În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".
Restricţii şi precizări[edit | edit source]
- 0 <= n <= 100
- valorile elementelor șirului vor fi < 1.000.000
Exemple[edit | edit source]
Exemplul 1[edit | edit source]
- Intrare
- Introduceti numere de maxim 6 cifre separate prin spatiu:7 9 1 234
- Ieșire
- Datele introduse sunt corecte!
- Suma elementelor prime este: 7
Exemplul 2[edit | edit source]
- Intrare
- Introduceti numere de maxim 6 cifre separate prin spatiu:1234000 12 121 2
- Ieșire
- Datele introduse sunt incorecte!
Exemplul 3[edit | edit source]
- Intrare
- Introduceti numere de maxim 6 cifre separate prin spatiu:4 6 8 12 15
- Ieșire
- Datele introduse sunt corecte!
- Nu exista numere prime in sir!
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1"> def is_integer(value):
return value.isdigit()
def este_prim(n):
if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True
def verificare_vector(vector):
n = 0 for i in vector: if is_integer(i): if 0 < int(i) < 1000000: n += 1 else: print("Datele introduse sunt incorecte!") exit() else: print("Datele introduse sunt incorecte!") exit() if n > 100 or n < 0: print("Datele introduse sunt incorecte!") exit()
def suma_elementelor_prime(sir):
suma = 0 for nr in sir: if este_prim(nr): suma += nr if suma == 0: print("Nu exista numere prime in sir!") exit() print("Suma elementelor prime este:", suma)
if __name__ == '__main__':
elem = input(f"Introduceti numere de maxim 6 cifre separate prin spatiu:").split() verificare_vector(elem) lst_int = list(map(int, elem)) print("Datele introduse sunt corecte!") suma_elementelor_prime(lst_int)
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
Acest program implementează o funcție care calculează suma elementelor prime dintr-un șir de numere date de la tastatură.
Funcția is_integer(value) este folosită pentru a verifica dacă un caracter reprezintă un număr întreg și returnează True dacă este, altfel returnează False.
Funcția este_prim(n) primește ca parametru un număr întreg și verifică dacă acesta este prim sau nu. Dacă numărul este mai mic decât 2, se consideră că nu este prim. În caz contrar, se verifică dacă numărul este divizibil cu orice număr întreg din intervalul [2, sqrt(n)]. Dacă numărul este divizibil cu un astfel de număr, se consideră că nu este prim, altfel se consideră că este prim.
Funcția verificare_vector(vector) verifică dacă vectorul are cel mult 100 elemente și dacă fiecare element este un număr întreg între 1 și 999999. Dacă vectorul este valid, nu se întoarce nimic. Dacă nu, se afișează un mesaj de eroare și se oprește programul.
Funcția suma_elementelor_prime(sir) primește ca parametru un șir de numere și calculează suma elementelor prime din acest șir. Pentru fiecare număr din șir, se verifică dacă acesta este prim folosind funcția este_prim(n). Dacă este prim, numărul este adunat la suma. Dacă nu există niciun număr prim în șir, se afișează un mesaj corespunzător și se oprește programul. În caz contrar, se afișează suma elementelor prime din șir.
Instrucțiunea if name == 'main': verifică dacă programul este rulat ca script și, în caz afirmativ, apelează funcțiile verificare_vector(elem) și suma_elementelor_prime(lst_int) pentru a verifica datele introduse și calcula suma elementelor prime.