3301 - Nr Div 9: Difference between revisions
Pagină nouă: == Cerința == Se dă un număr natural n. Să se scrie un program care determină și afișează pe ecran numărul de numere mai mici sau egale cu n care au exact 9 divizori. == Date de intrare == Programul citește din fișierul nrdiv9in.txt numărul n. == Date de ieșire == Programul scrie în fișierul nrdiv9out.txt numărul k, reprezentând numărul de numere mai mici sau egale cu n care au exact 9 divizori. == Restricții și precizări == *1 ⩽ n ⩽ 1.000.000.000... |
|||
| Line 14: | Line 14: | ||
:2 | :2 | ||
<br> | <br> | ||
== Explicație == | |||
Sunt 2 numere mai mici sau egale cu 100 care au exact 9 divizori: 36 și 100. | |||
== Exemplu 2 == | == Exemplu 2 == | ||
;nrdiv9in.txt | ;nrdiv9in.txt | ||
Revision as of 13:47, 5 January 2024
Cerința
Se dă un număr natural n. Să se scrie un program care determină și afișează pe ecran numărul de numere mai mici sau egale cu n care au exact 9 divizori.
Date de intrare
Programul citește din fișierul nrdiv9in.txt numărul n.
Date de ieșire
Programul scrie în fișierul nrdiv9out.txt numărul k, reprezentând numărul de numere mai mici sau egale cu n care au exact 9 divizori.
Restricții și precizări
- 1 ⩽ n ⩽ 1.000.000.000;
- dacă nu există numere mai mici sau egale cu n care au exact 9 divizori se va afișa valoarea 0.
Exemplu 1
- nrdiv9in.txt
- 100
- nrdiv9out.txt
- 2
Explicație
Sunt 2 numere mai mici sau egale cu 100 care au exact 9 divizori: 36 și 100.
Exemplu 2
- nrdiv9in.txt
- 1000
- nrdiv9out.txt
- 8
- Explicație
- Sunt 8 numere mai mici sau egale cu 1000 care au exact 9 divizori: 36, 100, 196, 225, 256, 441, 484, 676.
Exemplu 3
- nrdiv9in.txt
- 0
- nrdiv9out.txt
- 0
Rezolvare
<syntaxhighlight lang="python" line>
- 3301 - NrDiv9
def count_numbers_with_9_divisors(n):
def count_divisors(num):
divisors = 0
sqrt_num = int(num**0.5)
for i in range(1, sqrt_num + 1):
if num % i == 0:
divisors += 2 # i și num // i sunt divizori
if i == num // i:
divisors -= 1 # în cazul pătratelor perfecte, numărăm un divizor o singură dată
return divisors
count = 0
for num in range(1, n + 1):
if count_divisors(num) == 9:
count += 1
return count
- Citire date de intrare
try:
with open("nrdiv9in.txt", "r") as file:
n = int(file.readline())
except FileNotFoundError:
print("Fisierul de intrare nu exista!")
exit()
- Calcul și scriere rezultat în fișierul de ieșire
result = count_numbers_with_9_divisors(n) with open("nrdiv9out.txt", "w") as file:
file.write(str(result) + "\n")
</syntaxhighlight>