3459 - Count Prime

From Bitnami MediaWiki
Revision as of 21:42, 22 March 2023 by Alexandra Leș (talk | contribs) (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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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("Numărul de numere prime în intervalul [{}, {}] este: {}".format(stanga, dreapta, cnt))
       print("\nDatele de intrare corespund restricțiilor impuse.\n")
   else:
       print("Datele de intrare nu corespund restricțiilor impuse.")

</syntaxhighlight>