Ciência da Computação -~
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Crivo de Eratóstenes em Pascal

3 participantes

Ir para baixo

Crivo de Eratóstenes em Pascal Empty Crivo de Eratóstenes em Pascal

Mensagem por vinyanalista Sex Abr 15, 2011 12:27 pm

Olá, pessoal. Encontrei na Internet uma implementação do Crivo de Eratóstenes em Pascal. Fiz algumas alterações que, na minha opinião, tornavam melhor a compreensão e execução do código-fonte, e estou disponibilizando agora aqui para vocês:

Código:
program CrivoDeEratostenes;
{Calcula os números primos de 2 até N recorrendo ao Crivo de Eratóstenes
Modificado e comentado por Antônio Vinícius
Baseado em: http://wiki.portugal-a-programar.org/algoritmo:crivo_de_eratosthenes}
uses
  Crt;
var
  Limite: Integer; //Limite para cálculo do Crivo, que deve ser o número fornecido pelo usuário
  Numeros: set of Byte; //Conjunto dos números naturais de 2 até o limite
  Numero: Integer; //Número natural que será analisado, sendo excluído se for múltiplo de um primo
  Primos: set of Byte; //Conjunto dos números primos, que será obtido pelo Crivo
  Primo: Integer; //Número primo que excluirá seus múltiplos do Crivo
  MenorValor: Integer; //Variável auxiliar para determinar, após a exclusão dos múltiplos de um primo, qual o próximo primo a ser utilizado
begin
  write('Calcular numeros primos ate: ');
  readln(Limite); //Obtém o limite para o cálculo do Crivo
  Numeros:= [2..Limite]; //Define o conjunto dos números naturais de 2 até o limite do Crivo. Os fatores do número, se este não for primo, devem pertencer a este conjunto
  Primos:= []; //Define o conjunto dos números primos de 2 até o limite do Crivo. Ainda não foi calculado nenhum número primo, portanto este conjunto é vazio
  Primo:= 2; //Define o primeiro primo que será utilizado, que é 2
  while ([Primo] <= Numeros) do //Percorre o conjunto dos números naturais
  begin
    Primos:= Primos + [Primo]; //Acrescenta o primo da vez ao conjunto dos primos
    for Numero:= Primo to Limite do
    begin
      if (Numero mod Primo = 0) then Numeros:= Numeros - [Numero]; //Elimina do conjunto dos números naturais os múltiplos desse primo (inclusive ele próprio)
    end;
    MenorValor:= 2; //Determinação do próximo primo a ser utilizado, que é o menor valor dos restantes no conjunto dos números naturais
    while (not ([MenorValor] <= Numeros)) and (MenorValor <= Limite) do Inc(MenorValor);
    Primo:= MenorValor;
  end;
  write('Primos: '); // Mostra os números primos calculados
  for Primo:= 2 to Limite do
  begin
    if ([Primo] <= Primos) then write(Primo, ', ');
  end;
  writeln;
  write('Pressione qualquer tecla para sair...');
  readkey; //Pausa antes de encerrar para que o resultado possa ser lido na tela
end.

Só tem um problema com ele: ele só calcula números primos até 255, isso porque em uma das variáveis é do tipo conjunto de bytes (set of Byte), como vocês podem ver lá em cima. Eu tentei mudar o tipo para set of Integer, mas o compilador acusou erro, então deixei como estava. De certa forma, um dado do tipo conjunto (set) é novidade pra mim. Como é algo que desconheço, decidi deixar como estava.

Exceto por esse problema, esse código é excelente, e a série de comandos reproduz exatamente o que o professor mostrou sobre o Crivo de Eratóstenes.

Fica aberto o espaço para sugestões de melhorias nessa implementação ou outras implementações. Um abraço a todos.
vinyanalista
vinyanalista
Estudante Aplicado
Estudante Aplicado

Mensagens : 26
Data de inscrição : 04/04/2011

Ir para o topo Ir para baixo

Crivo de Eratóstenes em Pascal Empty Re: Crivo de Eratóstenes em Pascal

Mensagem por Saulo_Lordão Sex Abr 15, 2011 9:32 pm

Cara, muito bom o código, só é chato mesmo a limitação dele... Mas já é algo que vai ajudar os estudos.

Muito obrigado por sua iniciativa e pelo código!
Saulo_Lordão
Saulo_Lordão
Programador (PAS-Game Project)
Programador (PAS-Game Project)

Mensagens : 32
Data de inscrição : 05/04/2011

http://talk-geek.blogspot.com

Ir para o topo Ir para baixo

Crivo de Eratóstenes em Pascal Empty Re: Crivo de Eratóstenes em Pascal

Mensagem por Kiko Garcia Sáb Abr 16, 2011 3:55 pm

interessante esse script.

obrigado por trazer conteúdo útil ao fórum!
Att,
Kiko Garcia//
Kiko Garcia
Kiko Garcia
Administrador

Mensagens : 64
Data de inscrição : 04/04/2011

http://mycreepyhistories.blogspot.com/

Ir para o topo Ir para baixo

Crivo de Eratóstenes em Pascal Empty Re: Crivo de Eratóstenes em Pascal

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos