3301 - Nr Div 9: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
Line 1: Line 1:
== Cerința ==
== 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.
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 ==
== Date de intrare ==
Programul citește din fișierul nrdiv9in.txt numărul n.
Programul citește din fișierul '''nrdiv9in.txt''' numărul '''n'''.
== Date de ieșire ==
== 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.
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 ==
== Restricții și precizări ==
*1 ⩽ n ⩽ 1.000.000.000;
*'''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.
*dacă nu există numere mai mici sau egale cu '''n''' care au exact '''9''' divizori se va afișa valoarea '''0'''.
== Exemplu 1 ==
== Exemplu 1 ==
;nrdiv9in.txt
;'''nrdiv9in.txt'''
:100
:100
;nrdiv9out.txt
;'''nrdiv9out.txt'''
:2
:2
<br>
<br>
== Explicație ==
== Explicație ==
Sunt 2 numere mai mici sau egale cu 100 care au exact 9 divizori: 36 și 100.
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'''
:1000
:1000
;nrdiv9out.txt
;'''nrdiv9out.txt'''
:8
:8
== Explicație ==
== Explicație ==
Sunt 8 numere mai mici sau egale cu 1000 care au exact 9 divizori: 36, 100, 196, 225, 256, 441, 484, 676.
Sunt '''8''' numere mai mici sau egale cu '''1000''' care au exact '''9''' divizori: '''36, 100, 196, 225, 256, 441, 484, 676'''.


== Exemplu 3 ==
== Exemplu 3 ==
;nrdiv9in.txt
;'''nrdiv9in.txt'''
:0
;nrdiv9out.txt
:0
:0
;'''nrdiv9out.txt'''
:Nu au fost respectate cerintele impuse
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#3301 - NrDiv9
#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):
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
     count = 0
     for num in range(1, n + 1):
     for num in range(1, n + 1):
         if count_divisors(num) == 9:
         if count_divisors(num) == 9:
             count += 1
             count += 1
     return count
     return count


# Citire date de intrare
try:
try:
     with open("nrdiv9in.txt", "r") as file:
    # Citirea datelor de intrare
         n = int(file.readline())
     with open('nrdiv9in.txt', 'r') as f:
except FileNotFoundError:
         n = int(f.readline().strip())
     print("Fisierul de intrare nu exista!")
 
    exit()
    # 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))


# 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>
</syntaxhighlight>

Latest revision as of 14:12, 5 January 2024

Cerința[edit | edit source]

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[edit | edit source]

Programul citește din fișierul nrdiv9in.txt numărul n.

Date de ieșire[edit | edit source]

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[edit | edit source]

  • 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[edit | edit source]

nrdiv9in.txt
100
nrdiv9out.txt
2


Explicație[edit | edit source]

Sunt 2 numere mai mici sau egale cu 100 care au exact 9 divizori: 36 și 100.

Exemplu 2[edit | edit source]

nrdiv9in.txt
1000
nrdiv9out.txt
8

Explicație[edit | edit source]

Sunt 8 numere mai mici sau egale cu 1000 care au exact 9 divizori: 36, 100, 196, 225, 256, 441, 484, 676.

Exemplu 3[edit | edit source]

nrdiv9in.txt
0
nrdiv9out.txt
Nu au fost respectate cerintele impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

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