0570 - Divizori: Difference between revisions

From Bitnami MediaWiki
Adrian (talk | contribs)
No edit summary
Adrian (talk | contribs)
No edit summary
 
Line 11: Line 11:
În următorul rând se va afișa pe ecran elementele șirului construit.
În următorul rând se va afișa pe ecran elementele șirului construit.


În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse".
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Nu au fost respectate cerintele impuse".
== Restricții și precizări ==
== Restricții și precizări ==
* 1 ⩽ '''nr''' ⩽ 1000000000
* 1 ⩽ '''nr''' ⩽ 1000000000

Latest revision as of 11:15, 23 May 2023

Cerința[edit]

Se dă un număr natural nenul nr. Să se construiască un șir strict crescător de lungime maximă divizori[i] cu proprietatea că:

  • fiecare element al șirului este divizor al lui nr
  • divizori[i] este divizor al lui divizori[i+1]

Date de intrare[edit]

Programul citește de la tastatură numărul nr.

Date de ieșire[edit]

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse". În următorul rând se va afișa pe ecran elementele șirului construit.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Nu au fost respectate cerintele impuse".

Restricții și precizări[edit]

  • 1 ⩽ nr ⩽ 1000000000
  • dacă există mai multe șiruri de lungime maximă care respectă condițiile, se poate afișa oricare

Exemplu 1[edit]

Intrare
12
Ieșire
Datele de intrare corespund restricțiilor impuse
1
2
4
12


Exemplu 2[edit]

Intrare
0
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare[edit]

<syntaxhighlight lang="python" line>

  1. 0570 - Divizori

def validare(nr):

   # Daca datele sunt invalide v-om face raise la eroarea ValueError
   if not (nr >= 1 and nr <= 1000000000):
       raise ValueError


def divizori(nr):

   i = 1
   divizori = []
   # Aflam divizori lui nr si ii punem in lista
   while i*i <= nr:
       if nr % i == 0:
           divizori.append(i)
           if i*i != nr:
               divizori.append(nr // i)
       i += 1
   # Dupa ce i-am aflat ii sortam
   divizori.sort()
   temp = 1
   # Verificam ca divizori[i] este divizor al lui divizori[i+1]
   for divizor in divizori:
       if divizor % temp == 0:
           print(divizor)
           temp = divizor


if __name__ == '__main__':

   nr = int(input())
   try:
       validare(nr)
   except ValueError:
       print("Nu au fost respectate cerintele impuse")
   else:
       print("Datele de intrare corespund restricțiilor impuse")
   divizori(nr)

</syntaxhighlight>