4295 - Factor Exp Max
Cerinţa[edit | edit source]
Se dă un număr natural n. Să se determine factorul prim din descompunerea lui n care apare la puterea cea mai mare. Dacă există mai mulți factori care apar la putere maximă, se va afișa cel mai mare dintre ei.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran factorul prim cerut.
Restricții și precizări[edit | edit source]
- n este un număr natural strict mai mare decât 1 și are cel mult 12 cifre (este de tip long long)
Exemplu[edit | edit source]
- Intrare
- 7623
- Ieșire
- 11
Explicație[edit | edit source]
Descompunerea lui n=7623 în factori este 32 * 71 * 112. Sunt doi factori de exponent maxim 2, din care cel mai mare este 11.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> import math
def validare_date(n):
try: n = int(n) if n > 1 and n < 10**12: return n else: print("Numarul trebuie sa fie un numar natural mai mare decat 1 si mai mic decat 10^12.") return None except ValueError: print("Nu ati introdus un numar natural valid.") return None
if __name__ == '__main__':
n = input("Introduceti numarul n: ") n = validare_date(n)
if n: i = 2 factori = {} while i <= math.sqrt(n): p = 0 while n % i == 0: p += 1 n //= i if p > 0: factori[i] = p i += 1 if n > 1: factori[n] = 1
max_putere = max(factori.values()) factor_max_putere = max([f for f in factori.keys() if factori[f] == max_putere]) print(factor_max_putere)
else: print("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
Am implementat o soluție în Python pentru a găsi cel mai mare factor prim al unui număr natural dat. Am folosit o funcție de validare a datelor de intrare pentru a verifica dacă numărul dat este un număr natural între 2 și 10^12. Am parcurs apoi factorii primi ai numărului dat și am folosit un dicționar pentru a stoca puterile fiecărui factor prim. Am aflat factorul prim cu cea mai mare putere și l-am afișat. Dacă numărul de intrare nu a trecut validarea, am afișat un mesaj corespunzător.