0407 - Oglindit Prim: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == Se dă un șir cu '''n''' numere naturale. Determinați suma celor care au oglinditul număr prim. == Date de intrare == Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale. == Date de ieşire == Programul afișează pe ecran numărul '''S''', reprezentând rezultatul cerut. == Restricții și precizări == *'''1 ≤ n ≤ 1000''' *cele '''n''' numere citite vor fi mai mici decât '''1.000.000.000''' == Exemplu == ; Intrare :6...)
 
Fără descriere a modificării
 
(Nu s-a afișat o versiune intermediară efectuată de același utilizator)
Linia 18: Linia 18:
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def is_prime(num):
def prim(n):
     """Verifică dacă un număr este prim."""
     if n == 0 or n == 1:
     if num < 2:
        return 0
    if n == 2:
        return 1
    if n % 2 == 0:
        return 0
    for i in range(3, int(n**0.5) + 1, 2):
        if n % i == 0:
            return 0
    return 1
 
 
def validare_date(n):
     if n <= 0:
         return False
         return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
     return True
     return True




def reverse_number(num):
if __name__ == '__main__':
     """Returnează oglinditul unui număr."""
     n = int(input("Introduceti numarul de valori: "))
    reversed_num = 0
    if validare_date(n):
    while num > 0:
        s = 0
        reversed_num = reversed_num * 10 + num % 10
        for i in range(n):
        num //= 10
            x = int(input(f"Introduceti valoarea {i+1}: "))
     return reversed_num
            if validare_date(x):
                ogl = 0
                aux = x
                while x != 0:
                    ogl = ogl*10 + x%10
                    x //= 10
                if prim(ogl):
                    s += aux
            else:
                print("Datele de intrare nu corespund restricțiilor impuse.")
                break
        else:
            print("\nDatele de intrare corespund restricțiilor impuse.\n")
            print(f"Suma numerelor care au oglinda prima este: {s}")
     else:
        print("Datele de intrare nu corespund restricțiilor impuse.")


def validate_input(prompt, lower_bound, upper_bound):
    """Solicită introducerea unui număr întreg în intervalul [lower_bound, upper_bound]"""
    while True:
        try:
            num = int(input(prompt))
            if lower_bound <= num <= upper_bound:
                return num
            else:
                print(f"Introduceți un număr întreg în intervalul [{lower_bound}, {upper_bound}]")
        except ValueError:
            print("Introduceți un număr întreg valid.")




Linia 53: Linia 65:


</syntaxhighlight>
</syntaxhighlight>
==Explicație rezolvare==
Acest program primește un număr '''n''' de valori de la tastatură și calculează suma tuturor numerelor care au oglinda primă.
Oglinda unui număr este reprezentată de cifrele numărului în ordine inversă. De exemplu, oglinda numărului 1234 este 4321.
Pentru a determina dacă un număr este prim, se verifică dacă acesta este divizibil cu numerele între 2 și rădăcina pătrată a numărului (exclusiv). Dacă numărul este divizibil cu oricare dintre aceste numere, nu este prim.
Funcția '''validare_date''' verifică dacă un număr este pozitiv.
Programul afișează mesaje de eroare în cazul în care datele introduse nu corespund restricțiilor impuse și afișează suma numerelor care au oglinda primă în caz contrar.

Versiunea curentă din 9 aprilie 2023 19:44

Cerinţa

Se dă un șir cu n numere naturale. Determinați suma celor care au oglinditul număr prim.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale.

Date de ieşire

Programul afișează pe ecran numărul S, reprezentând rezultatul cerut.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu

Intrare
6

133 35 41 31 90 7

Ieșire
206

Explicație

Dintre cele 6 numere citite au oglinditul număr prim: 133 35 31 7. Suma lor este 206.

Rezolvare

def prim(n):
    if n == 0 or n == 1:
        return 0
    if n == 2:
        return 1
    if n % 2 == 0:
        return 0
    for i in range(3, int(n**0.5) + 1, 2):
        if n % i == 0:
            return 0
    return 1


def validare_date(n):
    if n <= 0:
        return False
    return True


if __name__ == '__main__':
    n = int(input("Introduceti numarul de valori: "))
    if validare_date(n):
        s = 0
        for i in range(n):
            x = int(input(f"Introduceti valoarea {i+1}: "))
            if validare_date(x):
                ogl = 0
                aux = x
                while x != 0:
                    ogl = ogl*10 + x%10
                    x //= 10
                if prim(ogl):
                    s += aux
            else:
                print("Datele de intrare nu corespund restricțiilor impuse.")
                break
        else:
            print("\nDatele de intrare corespund restricțiilor impuse.\n")
            print(f"Suma numerelor care au oglinda prima este: {s}")
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație rezolvare

Acest program primește un număr n de valori de la tastatură și calculează suma tuturor numerelor care au oglinda primă.

Oglinda unui număr este reprezentată de cifrele numărului în ordine inversă. De exemplu, oglinda numărului 1234 este 4321.

Pentru a determina dacă un număr este prim, se verifică dacă acesta este divizibil cu numerele între 2 și rădăcina pătrată a numărului (exclusiv). Dacă numărul este divizibil cu oricare dintre aceste numere, nu este prim.

Funcția validare_date verifică dacă un număr este pozitiv.

Programul afișează mesaje de eroare în cazul în care datele introduse nu corespund restricțiilor impuse și afișează suma numerelor care au oglinda primă în caz contrar.