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>