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
73 visitas
perguntada Out 15, 2020 em Ciência da Computação por Andrei Leite (21 pontos)  
Compartilhe

1 Resposta

0 votos
respondida Out 15, 2020 por Andrei Leite (21 pontos)  

A estratégia de resolução foi a seguinte.
Resolvi o problema em duas etapas: primeiro resolvi o problema de como definir uma função que identifica se um número é primo.
Depois disso, defini a função que de fato resolve o problema. Encapsulada nela, inclui a função citada acima, que retorna True se o número for primo.
Após isso, criei uma lista com todos os números no intervalo de interesse (inteiros entre t e n) e usei List comprehensions para criar uma lista com todos os números da lista 'numbers' que satisfazem às seguintes condições: é primo (testado pela função is_prime) e é diferente de 1.
Segue a resolução em Python:

import numpy as np
def prime_list(t,n): 
    def is_prime(n):            #Nested function: criando uma função dentro da função. Essa função irá retornar True se o número for primo
        prime=True
        count=2
        sqrt_floor=int(np.sqrt(n))
        while(prime and count<=sqrt_floor):
            if n%count==0:
                prime=False
            count+=1
        if (prime):
            return True
        else:
            return False
    numbers=list(range(t,n+1))            #Cria uma lista com todos os números que pertencem ao ntervalo de interesse.
    return([x for x in numbers if is_prime(x) and x!=1])  #List comprehension: se x em numbers, que é o intervalo de interesse, for primo e diferente de 1, adiciona x a uma lista
comentou Dez 14, 2020 por danielcajueiro (5,541 pontos)  
Essa solução não é uma solução de programação funcional! Dá uma olhada aqui: https://www.cs.cornell.edu/courses/cs3110/2010su/Lectures/AdamByrtekFPinPython.pdf
comentou Dez 14, 2020 por danielcajueiro (5,541 pontos)  
Note que as variaveis tem estado!
comentou Dez 14, 2020 por Fernando Fellows (16 pontos)  
Olá, Andrei.
Ainda que não seja uma solução de programação funcional, está interessante a criação de uma nested function e sua closure. Para maior velocidade de processamento do seu computador, eu excluiria de antemão números pares, e os quadrados.
Abraço
...