Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Números Primos


Allen Konstanz

Pergunta

O programa cria um vetor (array), de 1000 posições, contendo os número inteiros de 1 à 1000. E deveria mostrar todos os números primos contidos nesse vetor, mas ele não mostra os números 2,3,5,7 e 11, só os outros a partir do 13.

program primos_lista;

var i:integer;
num:array[1..1000] of integer;

BEGIN
for i:=1 to 1000 do begin
num[i]:=i;
end;

for i:=1 to 1000 do begin
if (num[i] mod 2 <>0) and (num[i] mod 3 <>0) and (num[i] mod 5 <>0) and (num[i] mod 7 <>0) and (num[i] mod 11 <>0) and (num[i] <>1) then
writeln(num[i]);
end;

END.

Editado por Jonathan Queiroz
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Existe um erro nesta logica

Em função deste comando, os numeros até 11 não serão mostrados, pois se a função mod não retornar dirente de zero para todos os termos, os numeros não serão mostrados. ( não mostra os números 2,3,5,7 e 11 )

OBS: Repare que são os mesmos numeros que estão na função mod

if (num[i] mod 2 <>0) and (num[i] mod 3 <>0) and (num[i] mod 5 <>0) and (num[i] mod 7 <>0) and (num[i] mod 11 <>0) and (num[i] <>1)
Caso queira usar matriz, basta alterar o código abaixo que esta correto
var x, i, cont: integer;
begin
   cont:=0;
   for i:= 1 to 1000 do
      begin
         for x := 1 to 11 do
            if i mod x = 0 then
               cont:=cont + 1;

         if cont<=2 then
            writeln('O numero ', i, ' e primo.');
         cont:=0;
         readln;
      end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Existe um erro nesta logica

Em função deste comando, os numeros até 11 não serão mostrados, pois se a função mod não retornar dirente de zero para todos os termos, os numeros não serão mostrados. ( não mostra os números 2,3,5,7 e 11 )

OBS: Repare que são os mesmos numeros que estão na função mod

if (num[i] mod 2 <>0) and (num[i] mod 3 <>0) and (num[i] mod 5 <>0) and (num[i] mod 7 <>0) and (num[i] mod 11 <>0) and (num[i] <>1)
Caso queira usar matriz, basta alterar o código abaixo que esta correto
var x, i, cont: integer;
begin
   cont:=0;
   for i:= 1 to 1000 do
      begin
         for x := 1 to 11 do
            if i mod x = 0 then
               cont:=cont + 1;

         if cont<=2 then
            writeln('O numero ', i, ' e primo.');
         cont:=0;
         readln;
      end;

end.
abraço
Amigo, tem algum erro no seu algoritmo, porque ele mostra o número 209 sendo primo, mas na verdade 209 é divisível por 11, o resultado é 19. Mas Obrigado mesmo assim. Pesquisando aqui na internet mais a fundo, encontrei uma solução para esse problema usando o Crivo de Erastótenes. Fica assim em pascal (comecei o array em 2 porque 1 não é primo):
program primosate1000;

var i,x,qnt:integer;

num:array[2..1000] of boolean;



BEGIN

qnt:=0;

{inicialmente todos os numeros são primos!} 

for i:=2 to 1000 do begin

num[i]:= true;

end;

{processo de verificação dos primos}

for i:=2 to 1000 do begin

  x:=2;

  while i*x <=1000 do begin

  num[i*x]:= false; {não é primo}

  x:=x+1

  end;

  end;

  

  {imprimir os números}

  for i:=2 to 1000 do begin

  if num[i] = true then

  write(i,' ');

  qnt:=qnt+1;

  end;

      

END.

O programa imprime os números primos entre 1 e 1000, e a quantidade de números primos entre 1 e 1000.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...