1307 - Siruri 1

From Bitnami MediaWiki

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

<syntaxhighlight lang="python" line>

  1. 1307 Siruri 1
  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


  1. 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


  1. 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))


  1. 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.")


</syntaxhighlight>