2330 - prim023

From Bitnami MediaWiki
Revision as of 10:38, 24 April 2023 by Csula Beatrice (talk | contribs)

Sursa: - prim023


Cerinţa

Dorel a scris un şir format din n numere naturale nenule. Apoi a luat fiecare subşir şi a calculat produsul termenilor săi. Aflaţi câte dintre produsele efectuate sunt numere prime.

Date de intrare

Fișierul de intrare prim023.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule 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 prim023.out va conține pe prima linie numărul produselor care sunt 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 ≤ 5.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000.000
  • un subşir conţine cel puţin un termen şi se formează alegând o parte din termenii şirului

Exemple

Exemplul 1

prim023.in
3
1 2 3
Ieșire
Datele sunt corecte.
prim023.out
4

Exemplul 2

prim023.in
4
13 3123 414 41241
Ieșire
Datele sunt corecte.
prim023.out
1

Exemplul 3

prim023.in
2
314441 41241241
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 2330 prim023

def este_prim(n):

   if n <= 1:
       return False
   for i in range(2, int(n**0.5) + 1):
       if n % i == 0:
           return False
   return True


def prim023(vector, n):

   with open("prim023.out", "w") as f:
       count = 0 
       for i in range(1 << n):   
           product = 1
           for j in range(n):  
               if i & (1 << j):  
                   product *= vector[j]
           if este_prim(product): 
               count += 1
       f.write(str(count))
   

def conform_restrictiilor():

   with open('prim023.in') as f:
       n = int(f.readline())
       vector = list(map(int, f.read().split()))
   if n > 5000:
       print("Datele nu sunt conform restricțiilor impuse.")
       exit()
   for x in vector:
       if x > 1000000000:
           print("Datele nu sunt conform restricțiilor impuse.")
           exit()
   print("Datele sunt corecte.")
   return n, vector


if __name__ == '__main__':

   n, vector = conform_restrictiilor()
   prim023(vector,n)


</syntaxhighlight>

Explicaţie cod