2141 - Exp
Enunț
Se dă un şir de n
numere naturale nenule x1
, x2
, …, xn
şi un număr natural m
.
Cerința
Să se verifice dacă valoarea expresiei este un număr natural. În caz afirmativ să se afișeze acest număr descompus în factori primi.
Date de intrare
Fișierul de intrare expIN.txt
conține pe prima linie m
, pe linia a doua n
, iar pe linia a treia numerele x1
, x2
, …, xn
separate între ele prin câte un spațiu.
Date de ieșire
În fișierul de ieșire expOUt.txt
se va scrie pe prima linie cifra 0
, dacă valoarea expresiei nu este un număr natural, respectiv 1
dacă este un număr natural. Dacă valoarea expresiei este un număr natural pe următoarele linii se vor scrie perechi de forma p e
(p
este factor prim care apare în descompunere la puterea e>=1
). Aceste perechi se vor scrie în ordine crescătoare după primul număr (adică p
).
Restricții și precizări
0 < n < 5000
0 < xi
< 30.001
, pentru oricei=1..n
m
poate fi una din cifrele2
,3
,4
.
Exemplul 1:
expIN.txt
2 4 32 81 100 18
expOUt.txt
1 2 4 3 3 5 1
Exemplul 2:
expIN.txt
6 6 45 5 44 23 32 32
consola:
Eroare: Numărul m trebuie să fie una din cifrele 2, 3, 4.
Rezolvare
<syntaxhighlight lang="python3" line="1"> def respecta_restrictiile(m, n, xi):
if not (0 < n < 5000): print("Eroare: Numărul de elemente n trebuie să fie între 0 și 5000.") return False
if not (0 < m < 5): print("Eroare: Numărul m trebuie să fie una din cifrele 2, 3, 4.") return False
if not all(0 < x < 30001 for x in xi): print("Eroare: Elementele xi trebuie să fie în intervalul (0, 30001).") return False
return True
def este_numar_natural(n):
return n == int(n) and n > 0
def descompunere_in_factori_primi(numar):
factori_primi = [] divizor = 2 while divizor <= numar: putere = 0 while numar % divizor == 0: numar //= divizor putere += 1 if putere > 0: factori_primi.append((divizor, putere)) divizor += 1 return factori_primi
def main():
with open("expIN.txt", "r") as f: m = int(f.readline().strip()) n = int(f.readline().strip()) xi = list(map(int, f.readline().split()))
if not respecta_restrictiile(m, n, xi): return
# Restul codului pentru calcule și scrierea în fișier rămâne neschimbat produs = 1 for x in xi: produs *= x
radical_m = produs ** (1/m)
with open("expOUT.txt", "w") as f: if este_numar_natural(radical_m): f.write("1\n") factori_primi = descompunere_in_factori_primi(int(radical_m)) for factor, putere in factori_primi: f.write(f"{factor} {putere}\n") else: f.write("0\n")
if __name__ == "__main__":
main()
</syntaxhighlight>