3301 - Nr Div 9
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
- Nu au fost respectate cerintele impuse
Rezolvare
<syntaxhighlight lang="python" line>
- 3301 - NrDiv9
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
def count_numbers_with_9_divisors(n):
count = 0 for num in range(1, n + 1): if count_divisors(num) == 9: count += 1 return count
try:
# Citirea datelor de intrare with open('nrdiv9in.txt', 'r') as f: n = int(f.readline().strip())
# Calculul și scrierea rezultatului în fișierul de ieșire count = count_numbers_with_9_divisors(n) with open('nrdiv9out.txt', 'w') as g: if count: g.write(str(count) + '\n') else: g.write("Nu au fost respectate cerintele impuse")
except Exception as e:
print("A apărut o eroare:", str(e))
</syntaxhighlight>