3308 - N Div Tri
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.