Faça uma função que retorne o maior fator primo de um número.

Passo 1

O enunciado pede uma função que, dado um inteiro maior que 1, retorne o maior fator primo desse número. O conteúdo envolve fatoração de inteiros e teste de divisibilidade.

Passo 2

Primeiro, vamos entender que todo número pode ser decomposto em fatores primos. Para encontrar o maior deles sem testar primalidade repetidamente, podemos ir tirando fatores menores e ficar registrando o último fator encontrado.
Começamos removendo todos os fatores 2. Enquanto o número for divisível por 2, dividimos por 2 e marcamos 2 como nosso maior fator primo até agora.

Passo 3

Depois, testamos divisores ímpares a partir de 3. Para cada divisor ímpar d, enquanto o valor atual for divisível por d, dividimos por d e atualizamos nosso maior fator para d. Não precisamos testar d além de √n_original, mas como vamos reduzindo o número, basta testar até √valor_atual.

Passo 4

Ao final, se restar um valor maior que 1, esse valor é primo e, por consequência, é o maior fator primo. Caso contrário, o maior fator armazenado durante o processo já é a resposta.

Passo 5

Implementamos tudo isso numa função clara. Mantemos uma variável para o maior fator e atualizamos conforme encontramos fatores primos, retornando-a no final.

Resposta

def maior_fator_primo(n):
if n <= 1:
raise ValueError(“O número deve ser maior que 1”)
maior = None
# Remove fatores 2
while n % 2 == 0:
maior = 2
n //= 2
# Remove fatores ímpares
d = 3
# Enquanto d*d <= n
while d * d <= n:
while n % d == 0:
maior = d
n //= d
d += 2
# Se sobrou um fator primo > 1, ele é o maior
if n > 1:
maior = n
return maior

Exercícios relacionados