2330 - prim023: Difference between revisions
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>
- 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>