0303 - Eratostene

From Bitnami MediaWiki
Revision as of 18:35, 26 March 2023 by Csula Beatrice (talk | contribs) (Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/303/eratostene - Eratostene] ---- == Cerinţa == Se dau '''n''' numere naturale mai mici decât '''1.000.000'''. Determinaţi câte dintre ele sunt prime. == Date de intrare == Fişierul de intrare '''eratostene.in''' conţine pe prima linie numărul '''n'''; urmează cele '''n''' numere, dispuse pe mai multe linii şi separate prin spaţii. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt c...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: - Eratostene


Cerinţa

Se dau n numere naturale mai mici decât 1.000.000. Determinaţi câte dintre ele sunt prime.

Date de intrare

Fişierul de intrare eratostene.in conţine pe prima linie numărul n; urmează cele n numere, dispuse pe mai multe linii şi 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 eratostene.out va conţine pe prima linie numărul C, reprezentând numărul valorilor citite care erau numere prime. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ 1.000.000

Exemple

Exemplul 1

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

Exemplul 2

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

Exemplul 3

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


Rezolvare

<syntaxhighlight lang="python" line>

  1. 0303 Eratostene

def eratostene(vector, n):

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


def conform_restrictiilor():

   vector = list()
   with open('eratostene.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 > 1000000 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>