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... |
Diana Butuza (talk | contribs) |
||
Line 52: | Line 52: | ||
with open('countprime.out', 'w') as fout: | with open('countprime.out', 'w') as fout: | ||
fout.write(str(cnt)) | fout.write(str(cnt)) | ||
print("\nDatele introduse corespund restricțiilor impuse.\n") | |||
print("Numărul de numere prime în intervalul [{}, {}] este: {}".format(stanga, dreapta, cnt)) | print("Numărul de numere prime în intervalul [{}, {}] este: {}".format(stanga, dreapta, cnt)) | ||
else: | else: | ||
print("Datele de intrare nu corespund restricțiilor impuse.") | print("Datele de intrare nu corespund restricțiilor impuse.") | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 11:56, 5 April 2023
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
- dreapta - stanga ⩽ 1.000.000
Exemplu
- countprime.in
- 2 10
- countprime.out
- Datele introduse corespund restricțiilor impuse.
- 4
Explicație
Sunt 4 numere prime în intervalul [2, 10].
Rezolvare
<syntaxhighlight lang="python" line>
def validare_date(stanga, dreapta):
flag = False if stanga.isdigit() and dreapta.isdigit(): if 0 < int(stanga) < int(dreapta) <= 2 ** 32 and int(dreapta) - int(stanga) <= 1_000_000: flag = True
return flag
def is_prime(n):
"""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 count_primes(stanga, dreapta):
"""Calculează câte numere prime sunt în intervalul [stanga, dreapta].""" count = 0 for n in range(stanga, dreapta + 1): if is_prime(n): count += 1 return count
if __name__ == "__main__":
with open('countprime.in', 'r') as fin: stanga, dreapta = fin.readline().split()
if validare_date(stanga, dreapta): cnt = count_primes(int(stanga), int(dreapta)) with open('countprime.out', 'w') as fout: fout.write(str(cnt)) print("\nDatele introduse corespund restricțiilor impuse.\n") print("Numărul de numere prime în intervalul [{}, {}] este: {}".format(stanga, dreapta, cnt)) else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>