2330 - prim023
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>
- 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>