3312 - Eratostene1: Difference between revisions

From Bitnami MediaWiki
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...
 
mNo edit summary
 
Line 20: Line 20:
: Datele sunt corecte.
: Datele sunt corecte.
; eratostene1.out
; eratostene1.out
: 4
: 3
===Exemplul 2===
===Exemplul 2===
; eratostene1.in
; eratostene1.in
Line 48: Line 48:
         divizor = 3
         divizor = 3
         while divizor * divizor <= numar:
         while divizor * divizor <= numar:
             if numar % divizor == 0:
             if numar % divizor == 0 or numar%2==0:
                 break
                 break
             divizor += 2
             divizor += 2

Latest revision as of 20:47, 26 March 2023

Sursa: - Eratostene1


Cerinţa[edit | edit source]

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

Date de intrare[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 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[edit | edit source]

Exemplul 1[edit | edit source]

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

Exemplul 2[edit | edit source]

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

Exemplul 3[edit | edit source]

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


Rezolvare[edit | edit source]

<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 or numar%2==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>