1307 - Siruri 1: Difference between revisions
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... |
No edit summary |
||
Line 24: | Line 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 | ||
Line 31: | Line 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. | ||
Line 38: | Line 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( | def este_prim(numar_prim): | ||
if | if numar_prim < 2: | ||
return False | return False | ||
for i in range(2, int( | for i in range(2, int(numar_prim**0.5) + 1): | ||
if | if numar_prim % i == 0: | ||
return False | return False | ||
return True | return True | ||
# | # Funcția pentru generarea șirului y | ||
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.") | |||
# | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 16:53, 9 November 2023
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>
- 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.")
</syntaxhighlight>