2330 - prim023: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/2330/prim023 - 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...
 
No edit summary
Line 25: Line 25:
;  prim023.in
;  prim023.in
: 4
: 4
:
: 13 3123 414 41241
; Ieșire
; Ieșire
: Datele sunt corecte.
: Datele sunt corecte.
;  prim023.out
;  prim023.out
:  
: 1
===Exemplul 3===
===Exemplul 3===
; prim023.in
; prim023.in
Line 39: Line 39:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#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)





Revision as of 10:38, 24 April 2023

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