3308 - N Div Tri

From Bitnami MediaWiki
Revision as of 11:55, 29 April 2023 by Paul Matei (talk | contribs) (Pagină nouă: == Cerinţa == Ș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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa

Ș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

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

Date de ieşire

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

  • 1 ≤ n ≤ 1000

Exemplu

Intrare
3
Ieșire
6

Explicație

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

Exemplu 2

Intrare
1
Ieșire
3

Explicație

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

Exemplu 3

Intrare
133
Ieșire
437580

Explicație

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

Rezolvare

<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

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.