1647 - Cumpanit
Enunt[edit | edit source]
Un număr natural nenul n se numește cumpănit dacă în descompunerea sa în factori primi suma bazelor este egală cu suma exponenților. De exemplu, numerele 72 = 2^3 * 3^2 , 5760 = 2^7 * 3^2 * 5^1 sunt cumpănite.
Cerința[edit | edit source]
Să se scrie un program care citește două numere naturale nenule a și b și determină toate numerele cumpănite din intervalul închis [a, b]. De exemplu, dacă a=2 și b=99, numerele cumpănite cuprinse între 2 şi 99 sunt 4, 27, 48 şi 72.
Date de intrare[edit | edit source]
Fişierul de intrare cumpanitin.txt conţine pe prima linie numerele naturale nenule a și b despărțite prin exact un spațiu, cu semnificaţia de mai sus.
Date de ieșire[edit | edit source]
Fişierul de ieşire cumpanitout.txt va conţine numerele căutate, scrise în ordine crescătoare, câte unul pe fiecare linie.
Restricții și precizări[edit | edit source]
- 2 ⩽ a ⩽ b ⩽ 10^14.
- Pentru 25% din teste se garantează că 2 ≤ a ≤ b ≤ 106.
Exemplu 1[edit | edit source]
- cumpanitin.txt
- 2 99
- cumpanitout.txt
- Datele corespund
- 4
- 27
- 48
- 72
Exemplu 2[edit | edit source]
- cumpanitin.txt
- 1 0 -1
- cumpanitout.txt
- Datele nu corespund
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1647 - Cumpanit
def este_cumpanit(numar):
# Calculează descompunerea în factori primi și verifică condiția cumpănită divizor = 2 suma_baze = 0 suma_exponenti = 0
while numar > 1: putere = 0 while numar % divizor == 0: numar //= divizor putere += 1 if putere > 0: suma_baze += divizor suma_exponenti += putere divizor += 1
return suma_baze == suma_exponenti
def main():
try: with open("cumpanitin.txt", "r") as fin: a, b = map(int, fin.readline().strip().split()) except FileNotFoundError: print("Fișierul cumpanitin.txt nu a fost găsit.") return except ValueError: print("Datele din fișierul de intrare nu sunt corecte.") return
if not (2 <= a <= b <= 10 ** 14): print("Datele nu corespund restricțiilor.") return
try: with open("cumpanitout.txt", "w") as fout: for numar in range(a, b + 1): if este_cumpanit(numar): fout.write(str(numar) + "\n") print("Datele corespund.") except IOError: print("Nu s-a putut scrie în fișierul de ieșire.")
if __name__ == "__main__":
main()
</syntaxhighlight>