4295 - Factor Exp Max

From Bitnami MediaWiki

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.