1307 - Siruri 1: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == Se citeşte un şir '''X''' de numere naturale cu '''n''' elemente. Scrieţi un program care determină şirul Y de numere prime distincte, care figurează la puterea întâi în cel puţin o descompunere ȋn factori primi a unui număr din șirul X. Dacă niciun element al şirului X nu are un factor prim la puterea întâi, atunci se va tipări mesajul '''Sirul Y este vid'''. Se vor scrie subprograme pentru: * citirea unui şir de numere naturale * tipărire...)
 
Fără descriere a modificării
Linia 24: Linia 24:
: 77 58 77 31
: 77 58 77 31
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 2 7 11 29 31
: 2 7 11 29 31


Linia 31: Linia 32:
: 64 36 100 125
: 64 36 100 125
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Sirul Y este vid.
: Sirul Y este vid.


Linia 38: Linia 40:
: 25 5 125 5
: 25 5 125 5
; Iesire
; Iesire
: Datele introduse corespund restricțiilor impuse.
: 5
: 5
== Exemplul 4 ==
; Intrare
: 5
: 2 q -1000000 4 x
; Iesire
: Datele introduse nu corespund restricțiilor impuse.
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# 1307 Siruri 1
# Definim funcția de verificare a valorii n și a elementelor șirului
def verificare(verificare_numar, sir_verificare):
    # Verificăm dacă n respectă restricțiile problemei
    if 1 <= verificare_numar <= 500:
        # Verificăm dacă fiecare element al șirului respectă restricțiile problemei
        for element in sir_verificare:
            if not (0 <= element <= 1000):
                # Dacă un element nu respectă restricțiile, ridicăm o excepție
                raise ValueError
        # Dacă toate valorile sunt valide, returnăm True
        return True
    else:
        # Dacă valoarea n nu este validă, ridicăm o excepție
        raise ValueError
# Funcția pentru a verifica dacă un număr este prim
# Funcția pentru a verifica dacă un număr este prim
def este_prim(n):
def este_prim(numar_prim):
     if n < 2:
     if numar_prim < 2:
         return False
         return False
     for i in range(2, int(n**0.5) + 1):
     for i in range(2, int(numar_prim**0.5) + 1):
         if n % i == 0:
         if numar_prim % i == 0:
             return False
             return False
     return True
     return True


n = int(input())
# Citim elementele șirului
sir = list(map(int, input().split()))


# Inițializăm un set gol pentru a stoca numerele prime unice
# Funcția pentru generarea șirului y
Y = set()
def generare_y(sir_y):
    y = set()
    for x in sir_y:
        for i in range(2, x + 1):
            if x % i == 0 and este_prim(i) and x % (i*i) != 0:
                y.add(i)
    return sorted(list(y))
 
 
# Verificăm dacă acest script este rulat direct (nu este importat ca modul)
if __name__ == '__main__':
    try:
        # Citim numărul de elemente din șir
        n = int(input("Introduceti numarul de elemente din sir: "))
        # Citim elementele șirului
        sir = list(map(int, input("Introduceti elementele sirului, separate prin spatii: ").split()))
 
        # Verificăm dacă datele introduse sunt valide
        if verificare(n, sir):
            # Dacă datele sunt valide, afișăm un mesaj de confirmare
            print("Datele introduse corespund restricțiilor impuse.")
 
        # Generăm și afișăm șirul Y
        Y = generare_y(sir)
        if len(Y) == 0:
            print("Sirul Y este vid.")
        else:
            print(' '.join(map(str, Y)))


# Parcurgem fiecare număr din șir
     # Tratăm cazul în care datele introduse nu sunt valide
for x in sir:
     except ValueError:
     # Verificăm fiecare divizor al numărului
         # Afișăm un mesaj de eroare
     for i in range(2, x + 1):
         print("Datele introduse nu corespund restricțiilor impuse.")
         # Dacă 'i' este un divizor al lui 'x', 'i' este prim și 'x' nu este divizibil cu pătratul lui 'i'
         if x % i == 0 and este_prim(i) and x % (i*i) != 0:
            # Adăugăm 'i' în setul 'Y'
            Y.add(i)


# Verificăm dacă setul 'Y' este gol
if len(Y) == 0:
    print("Sirul Y este vid.")
else:
    # Sortăm și afișăm elementele din 'Y'
    print(' '.join(map(str, sorted(Y))))


</syntaxhighlight>
</syntaxhighlight>

Versiunea de la data 9 noiembrie 2023 16:53

Cerinţa

Se citeşte un şir X de numere naturale cu n elemente. Scrieţi un program care determină şirul Y de numere prime distincte, care figurează la puterea întâi în cel puţin o descompunere ȋn factori primi a unui număr din șirul X. Dacă niciun element al şirului X nu are un factor prim la puterea întâi, atunci se va tipări mesajul Sirul Y este vid.

Se vor scrie subprograme pentru:

  • citirea unui şir de numere naturale
  • tipărirea unui şir
  • generarea tuturor numerelor prime mai mici sau egale decât un număr dat SAU verificarea dacă un număr este prim (ȋn funcție de modalitatea de rezolvare aleasă)
  • verificarea dacă un număr figurează la puterea întâi în descompunerea unui număr dat
  • construirea șirului Y

Date de intrare

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului X.

Date de ieşire

Programul va afișa pe ecran elementele șirului Y, ordonate crescător, separate prin câte un spațiu.

Restricții și precizări

  • 1 ⩽ n ⩽ 500
  • cele n numere citite vor fi mai mici decât 1000

Exemplul 1

Intrare
7
77 58 77 31
Ieșire
Datele introduse corespund restricțiilor impuse.
2 7 11 29 31

Exemplul 2

Intrare
4
64 36 100 125
Ieșire
Datele introduse corespund restricțiilor impuse.
Sirul Y este vid.

Exemplul 3

Intrare
4
25 5 125 5
Iesire
Datele introduse corespund restricțiilor impuse.
5

Exemplul 4

Intrare
5
2 q -1000000 4 x
Iesire
Datele introduse nu corespund restricțiilor impuse.

Rezolvare

# 1307 Siruri 1

# Definim funcția de verificare a valorii n și a elementelor șirului
def verificare(verificare_numar, sir_verificare):
    # Verificăm dacă n respectă restricțiile problemei
    if 1 <= verificare_numar <= 500:
        # Verificăm dacă fiecare element al șirului respectă restricțiile problemei
        for element in sir_verificare:
            if not (0 <= element <= 1000):
                # Dacă un element nu respectă restricțiile, ridicăm o excepție
                raise ValueError
        # Dacă toate valorile sunt valide, returnăm True
        return True
    else:
        # Dacă valoarea n nu este validă, ridicăm o excepție
        raise ValueError


# Funcția pentru a verifica dacă un număr este prim
def este_prim(numar_prim):
    if numar_prim < 2:
        return False
    for i in range(2, int(numar_prim**0.5) + 1):
        if numar_prim % i == 0:
            return False
    return True


# Funcția pentru generarea șirului y
def generare_y(sir_y):
    y = set()
    for x in sir_y:
        for i in range(2, x + 1):
            if x % i == 0 and este_prim(i) and x % (i*i) != 0:
                y.add(i)
    return sorted(list(y))


# Verificăm dacă acest script este rulat direct (nu este importat ca modul)
if __name__ == '__main__':
    try:
        # Citim numărul de elemente din șir
        n = int(input("Introduceti numarul de elemente din sir: "))
        # Citim elementele șirului
        sir = list(map(int, input("Introduceti elementele sirului, separate prin spatii: ").split()))

        # Verificăm dacă datele introduse sunt valide
        if verificare(n, sir):
            # Dacă datele sunt valide, afișăm un mesaj de confirmare
            print("Datele introduse corespund restricțiilor impuse.")

        # Generăm și afișăm șirul Y
        Y = generare_y(sir)
        if len(Y) == 0:
            print("Sirul Y este vid.")
        else:
            print(' '.join(map(str, Y)))

    # Tratăm cazul în care datele introduse nu sunt valide
    except ValueError:
        # Afișăm un mesaj de eroare
        print("Datele introduse nu corespund restricțiilor impuse.")