3308 - N Div Tri

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Șirul numerelor triunghiulare e obținut prin adunarea numerelor naturale. Deci al șaptelea număr triunghiular e 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Primii 10 termeni din șir sunt: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... Să listăm toți divizorii primelor 7 numere triunghiulare:

   1: 1
   3: 1,3
   6: 1,2,3,6
  10: 1,2,5,10
  15: 1,3,5,15
  21: 1,3,7,21
  28: 1,2,4,7,14,28

Se poate observa că 28 e primul număr triunghiular care are mai mult de 5 divizori. Se dă un număr natural n. Să se scrie un program care determină primul număr triunghiular cu mai mult de n divizori.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul natural n.

Date de ieşire[edit | edit source]

Programul afișează pe ecran numărul x, reprezentând primul număr triunghiular care are mai mult de n divizori.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 1000

Exemplu[edit | edit source]

Intrare
3
Ieșire
6

Explicație[edit | edit source]

Primul număr trunghiular care are mai mult de 3 divizori este 6.

Exemplu 2[edit | edit source]

Intrare
1
Ieșire
3

Explicație[edit | edit source]

Primul număr trunghiular care are mai mult de un divizor este 3.

Exemplu 3[edit | edit source]

Intrare
133
Ieșire
437580

Explicație[edit | edit source]

Primul număr trunghiular care are mai mult de 133 de divizori este 437580.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def numar_divizori(n):

   numar = 0
   for i in range(1, int(n**0.5)+1):
       if n % i == 0:
           if n/i == i:
               numar += 1
           else:
               numar += 2
   return numar


def validare_date(n):

   if n.isdigit() and 1 <= int(n) <= 1000:
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
       return True
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")
       return False


if __name__ == '__main__':

   n = input("Introduceti n: ")
   if validare_date(n):
       numar = 1
       index = 2
       while numar_divizori(numar) <= int(n):
           numar += index
           index += 1
       print("Primul număr triunghiular cu mai mult de", n, "divizori este:", numar)


</syntaxhighlight>

Explicație rezolvare[edit | edit source]

Acest program găsește primul număr triunghiular care are mai mult de n divizori. Folosind o buclă while, programul calculează numerele triunghiulare și numără divizorii acestora până când se găsește primul număr triunghiular care are mai mult de n divizori. Pentru a se asigura că datele de intrare sunt valide, programul include o funcție care verifică dacă n se află în intervalul specificat.