3308 - N Div Tri

De la Universitas MediaWiki

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

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)

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.