3312 - Eratostene1

From Bitnami MediaWiki
Revision as of 18:42, 26 March 2023 by Csula Beatrice (talk | contribs) (Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/3312/eratostene1 - Eratostene1] ---- == Cerinţa == Se dau '''n''' numere naturale. Aflaţi câte dintre aceste numere sunt prime. == Date de intrare == Fișierul de intrare '''eratostene1.in''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale separate prin spații. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul de ieşi...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: - Eratostene1


Cerinţa

Se dau n numere naturale. Aflaţi câte dintre aceste numere sunt prime.

Date de intrare

Fișierul de intrare eratostene1.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul de ieşire eratostene1.out va conţine pe prima linie numărul nr_prime, numărul numerelor prime aflate în fişierul de intrare. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ 500.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000

Exemple

Exemplul 1

eratostene1.in
6
12 18 19 25 29 7
Ieșire
Datele sunt corecte.
eratostene1.out
4

Exemplul 2

eratostene1.in
3
100 102 104
Ieșire
Datele sunt corecte.
eratostene1.out
0

Exemplul 3

eratostene1.in
3
191824719471 19991 19724174
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 3312 Eratostene1

def eratostene(vector, n):

   nr_prime = 0
   for i in range(n):
       numar = vector[i]
       if numar == 2:
           nr_prime += 1
       divizor = 3
       while divizor * divizor <= numar:
           if numar % divizor == 0:
               break
           divizor += 2
       if divizor ** 2 > numar:
           nr_prime += 1
   f = open("eratostene1.out", "w")
   f.write(str(nr_prime))


def conform_restrictiilor():

   vector = list()
   with open('eratostene1.in') as f:
       lines = f.readlines()
       for line in lines:
           for c in line.split():
               if c.isdigit() == True:
                   vector.append(int(c))
   n = vector[0]
   vector = vector[1:]
   if n > 500000 and n < 1:
       print("Datele nu sunt comform restricțiilor impuse.")
       exit()
   for x in vector:
       if x < 0 or x > 1000000:
           print("Datele nu sunt comform restricțiilor impuse.")
           exit()
   print("Datele sunt corecte.")
   return vector, n


if __name__ == '__main__':

   vector, n = conform_restrictiilor()
   eratostene(vector, n)


</syntaxhighlight>