Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Escreva um código seguindo os princípios de programação funcional para encontrar todos os primos em um determinado intervalo.

0 votos
13 visitas
perguntada Nov 5 em Matemática por Fábio Springer (11 pontos)  

Escreva um código seguindo os princípios de programação funcional para encontrar todos os primos em um determinado intervalo.

Compartilhe

1 Resposta

0 votos
respondida Nov 5 por Fábio Springer (11 pontos)  

Em primeiro lugar definimos uma função que identifica se o um numero é primo. Lembre-se um número é primo se ele for divisível apenas por ele mesmo e pelo número 1.

def prime(n):
    for k in range(2,n):
        if n%k == 0:
           return False
    return True

Perceba que dado N a função analisa cada número até N, sem incluir N, e retorna True se o número for primo. Em seguida definimos uma função que pega os números primos e os adiciona numa lista.

def list_primes(m):
    primes = [1]
    for k in range(2,m):
        if prime(k):
           primes.append(k)
    return primes 

Por fim verificamos se o código funciona para os 100 primeiros números.

if __name__ == "__main__":
   print(list_primes(100))

E obtemos: [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

comentou Nov 8 por Henrique Alves (11 pontos)  
Olá Fábio, tudo bem?
Primeiramente, parabéns pelo seu trabalho.

O código funcionou sem problemas aqui no meu computador, e eu tenho poucas colocações a fazer.

A primeira seria: Será que você não poderia fazer tudo dentro de uma única função? Por exemplo, no lugar de chamar outra função dentro da list_primes(m), você verificaria se é primo dentro dessa própria função.

Outra coisa que eu notei: Geralmente esses algoritmos mais simples são usados dentro de outros códigos. Não seria interessante além de imprimir a lista com os números, imprimir uma variável com a quantidade de números nessa lista? Acredito que geralmente nessas situações seja mais interessante a quantidade de primos até um número N.

O uso do if __name__ == "__main__": está correto e todo o resto está excelente. Parabéns mais uma vez por seu trabalho;
Grande abraço
comentou Nov 8 por Fábio Springer (11 pontos)  
Acredito que seria sim possível fazer tudo com apenas uma função, escolhi fazer com dessa forma pois acredito que fica mais fácil de perceber porque está acontecendo.
comentou Nov 8 por danielcajueiro (5,501 pontos)  
De fato, o seu codigo calcula corretamente os primos, mas nao parece seguir os principios de programação funcional. Note que vc altera valores de variaveis ao longo da execução.
...