3308 - N Div Tri

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.