3459 - Count Prime: Difference between revisions
Pagină nouă: == Cerinţa == Să se calculeze cate numere prime sunt în intervalul '''[stanga, dreapta]'''. == Date de intrare == Fișierul de intrare '''countprime.in''' conține pe prima linie două numere '''stanga''' și '''dreapta'''. == Date de ieşire == Fișierul de ieșire '''countprime.out''' va conține pe prima linie numărul '''cnt''', reprezentând numărul de numere prime din intervalul dat. == Restricții și precizări == * 1 ⩽ stanga ⩽ dreapta ⩽ 2 ** 32 * dre... |
|||
(2 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
Fișierul de intrare '''countprime.in''' conține pe prima linie două numere '''stanga''' și '''dreapta'''. | Fișierul de intrare '''countprime.in''' conține pe prima linie două numere '''stanga''' și '''dreapta'''. | ||
== Date de ieşire == | == Date de ieşire == | ||
Dacă datele sunt introduse corect, în fișier se va afișa:'''"Datele sunt introduse corect."''', apoi pe un rând nou fișierul de ieșire '''countprime.out''' va conține pe prima linie numărul '''cnt''', reprezentând numărul de numere prime din intervalul dat. În cazul în care datele nu respectă restricțiile, se va afișa în fișier:'''"Datele nu corespund restricțiilor impuse."'''. | |||
== Restricții și precizări == | == Restricții și precizări == | ||
* 1 ⩽ stanga ⩽ dreapta ⩽ 2 ** 32 | * 1 ⩽ stanga ⩽ dreapta ⩽ 2 ** 32 | ||
Line 12: | Line 12: | ||
: 2 10 | : 2 10 | ||
; countprime.out | ; countprime.out | ||
: Datele introduse | : Datele sunt introduse corect. | ||
== Explicație == | == Explicație == | ||
Sunt '''4''' numere prime în intervalul '''[2, 10]'''. | Sunt '''4''' numere prime în intervalul '''[2, 10]'''. | ||
Line 21: | Line 21: | ||
def validare_date(stanga, dreapta): | def validare_date(stanga, dreapta): | ||
flag = False | flag = False | ||
if stanga.isdigit() and dreapta.isdigit(): | if stanga.isdigit() and dreapta.isdigit(): #verificam daca ambele string-uri pot fi convertite in numere intregi | ||
if 0 < int(stanga) < int(dreapta) <= 2 ** 32 and int(dreapta) - int(stanga) <= 1_000_000: | if 0 < int(stanga) < int(dreapta) <= 2 ** 32 and int(dreapta) - int(stanga) <= 1_000_000: #verificam daca cele doua numere se afla in intervalul si au o diferenta mai mica sau egala cu 1.000.000 | ||
flag = True | flag = True | ||
return flag | return flag | ||
def | def prim(n): | ||
#Funcția verifică dacă un număr este prim | |||
if n < 2: | if n < 2: | ||
return False | return False | ||
Line 36: | Line 35: | ||
return True | return True | ||
def | def câte_prime(stanga, dreapta): | ||
#Funcția calculează numărul de numere prime din intervalul [stanga, dreapta] | |||
nr = 0 | |||
for n in range(stanga, dreapta + 1): | for n in range(stanga, dreapta + 1): | ||
if | if prim(n): | ||
nr += 1 | |||
return | return nr | ||
if __name__ == '__main__': | |||
with open('countprime.in', 'r') as fin, open('countprime.out', 'w') as fout: | |||
stanga, dreapta = fin.readline().split() #citim cele doua numere din fișierul de intrare | |||
if validare_date(stanga, dreapta): #verificăm dacă cele două numere respectă condițiile impuse | |||
cnt = câte_prime(int(stanga), int(dreapta)) #calculăm numărul de numere prime din intervalul [stanga, dreapta] | |||
fout.write("Datele sunt introduse corect.\n") #scriem mesajul in fișierul de ieșire | |||
fout.write(str(cnt)) #scriem in fisierul de ieșire numărul de numere prime | |||
else: | |||
fout.write("Datele introduse nu corespund restrictiilor impuse.")#în cazul în care nu sunt respectate condițiile impuse afișăm mesajul corespunzător | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 10:40, 25 April 2023
Cerinţa[edit | edit source]
Să se calculeze cate numere prime sunt în intervalul [stanga, dreapta].
Date de intrare[edit | edit source]
Fișierul de intrare countprime.in conține pe prima linie două numere stanga și dreapta.
Date de ieşire[edit | edit source]
Dacă datele sunt introduse corect, în fișier se va afișa:"Datele sunt introduse corect.", apoi pe un rând nou fișierul de ieșire countprime.out va conține pe prima linie numărul cnt, reprezentând numărul de numere prime din intervalul dat. În cazul în care datele nu respectă restricțiile, se va afișa în fișier:"Datele nu corespund restricțiilor impuse.".
Restricții și precizări[edit | edit source]
- 1 ⩽ stanga ⩽ dreapta ⩽ 2 ** 32
- dreapta - stanga ⩽ 1.000.000
Exemplu[edit | edit source]
- countprime.in
- 2 10
- countprime.out
- Datele sunt introduse corect.
Explicație[edit | edit source]
Sunt 4 numere prime în intervalul [2, 10].
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
def validare_date(stanga, dreapta):
flag = False if stanga.isdigit() and dreapta.isdigit(): #verificam daca ambele string-uri pot fi convertite in numere intregi if 0 < int(stanga) < int(dreapta) <= 2 ** 32 and int(dreapta) - int(stanga) <= 1_000_000: #verificam daca cele doua numere se afla in intervalul si au o diferenta mai mica sau egala cu 1.000.000 flag = True return flag
def prim(n):
#Funcția verifică dacă un număr este prim if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True
def câte_prime(stanga, dreapta):
#Funcția calculează numărul de numere prime din intervalul [stanga, dreapta] nr = 0 for n in range(stanga, dreapta + 1): if prim(n): nr += 1 return nr
if __name__ == '__main__':
with open('countprime.in', 'r') as fin, open('countprime.out', 'w') as fout: stanga, dreapta = fin.readline().split() #citim cele doua numere din fișierul de intrare
if validare_date(stanga, dreapta): #verificăm dacă cele două numere respectă condițiile impuse cnt = câte_prime(int(stanga), int(dreapta)) #calculăm numărul de numere prime din intervalul [stanga, dreapta]
fout.write("Datele sunt introduse corect.\n") #scriem mesajul in fișierul de ieșire fout.write(str(cnt)) #scriem in fisierul de ieșire numărul de numere prime
else: fout.write("Datele introduse nu corespund restrictiilor impuse.")#în cazul în care nu sunt respectate condițiile impuse afișăm mesajul corespunzător
</syntaxhighlight>