3301 - Nr Div 9

From Bitnami MediaWiki

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>

  1. 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
  1. 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()
  1. 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>