3301 - Nr Div 9: Difference between revisions
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 | :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): | ||
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 | ||
try: | try: | ||
with open( | # Citirea datelor de intrare | ||
n = int( | with open('nrdiv9in.txt', 'r') as f: | ||
except | n = int(f.readline().strip()) | ||
print(" | |||
# 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> | </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>
- 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>