Oi, David! Tudo bem com você?
Dependendo do número analisado, talvez a sua proposta não apresente o caminho mais eficiente. A operação de divisão (feita em seu programa no trecho de n/2
) é computacionalmente mais "cara" do que a operação de subtração (realizada no código da aula, no momento em que verificamos num-1
vezes se todos os números de 2 são divisores de num
).
Nesse sentido, mesmo que o seu código faça menos verificações, a operação de divisão adicional pode deixá-lo mais lento. Uma forma legal de testar essa situação é observando quanto tempo cada programa leva para afirmar se um número extremamente extenso é primo ou não. No código abaixo, usei o módulo time
, do Python, para extrair essa informação:
import time
n = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
tempo_inicial = time.time()
if n > 1:
for i in range(2, int(n/2) + 1):
if (n % i) == 0:
print(f"{n} is not prime.")
break
else:
print(f"{n} is prime!")
else:
print(f"{n} is not prime")
tempo_final = time.time()
duracao_tempo = tempo_final - tempo_inicial
print(f"Duração: {duracao_tempo} segundos")
Antes de começar o programa em si, contabilizei o tempo inicial com time.time()
. Ao final da execução, realizei o mesmo passo e subtraí os valores de tempo_final
e tempo_inicial
, obtendo a duração em segundos desta execução!
Você pode replicar este mesmo passo a passo para o código do curso e, então, comparar a eficiência de cada processo. Caso queira explorar um pouco mais este módulo, você pode acessar o material abaixo, David:
Vale enfatizar que nem sempre os resultados serão os mesmos.
Quando estamos desenvolvendo um programa, precisamos pensar em estratégias para deixá-lo "pythônico". Geralmente, isso depende de múltiplas questões, sendo a eficiência uma delas. Além disso, diante de situações como esta, é bem interessante analisar casos mais extremos (como este que mostrei), pois geralmente são eles que nos mostram a eficiência do nosso projeto em um cenário do mundo real.
Espero que tenha ficado mais claro, David! A sua sugestão também é uma possibilidade bem bacana, fico feliz que tenha identificado uma maneira distinta de resolver o desafio. :)
Sempre que precisar, conte com o fórum.
Um abraço!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!