1827 – Vector Sum Prim

De la Universitas MediaWiki

Sursa: VectorSumPrim


Cerinţă

Se dă un șir cu n elemente întregi. Să se afișeze suma elementelor prime din șir.

Date de intrare

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

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

  • 0 <= n <= 100
  • valorile elementelor șirului vor fi < 1.000.000

Exemple

Exemplul 1

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

Intrare
Introduceti numere de maxim 6 cifre separate prin spatiu:1234000 12 121 2
Ieșire
Datele introduse sunt incorecte!

Exemplul 3

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

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)

Explicație rezolvare

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.