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

Números Primos (Resolvido)


Paulo Nobre

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 0

Estou tentando o código abaixo para achar os primos entre 2 e n, mas está dando totalmante errado. Alguém poderia ajudar.

Editei o código anterior, mas continua dando erro.

procedure TfrmPrincipal.cmdMostrarPrimos1Click(Sender: TObject);

Var

n: Integer;//Número primo limítrofe

i: Integer; //Contador do laço;

j: integer;

R: Integer;// resto da divisão

begin

n:= StrToInt(txtn1.Text);

memo2.Clear;

If n<2 Then

begin

MessageBox(handle,'Um número natural maior do que 2 deve ser digitado !','ATENÇÃO',MB_IconExclamation);

txtn1.Text:= '';

txtn1.SetFocus;

abort;

end;

If n = 2 Then

begin

MessageBox(handle,'Dois é um número primo. Na realidade o único número primo par e positivo !','ATENÇÃO',MB_IconExclamation);

memo2.Lines.Add(IntToStr(2));

abort;

end;

If n = 3 Then

begin

memo2.Lines.Add(IntToStr(2));

memo2.Lines.Add(IntToStr(3));

end;

If n = 4 Then

begin

memo2.Lines.Add(IntToStr(2));

memo2.Lines.Add(IntToStr(3));

end;

If n > 4 Then

begin//1

memo2.Lines.Add(IntToStr(2));

memo2.Lines.Add(IntToStr(3));

For i:= 4 to n do

begin//2

For j:= 2 to i - 1 do

begin//3

R:= i mod j;

If R = 0 Then

//Não faz nada

Else

memo2.Lines.Add(IntToStr(i));

end;//3

end;//2

end;//1

end;

Quando digito 5 para saber quantos primos existem de 2 até 5 aparecem 2,3,4,5,5,5.

Sei que o erro está na parte ...

For i:= 4 to n do

begin//2

For j:= 2 to i - 1 do

begin//3

R:= i mod j;

If R = 0 Then

//Não faz nada

Else

memo2.Lines.Add(IntToStr(i));

end;//3

end;//2

Na realidade preciso que memo2.Lines.Add(IntToStr(i)); seja executado apenas se R<>0 sempre.

Link para o comentário
Compartilhar em outros sites

  • 0

Alguém poderia me passar um código para achar os números primos num determinado intervalo, por exemplo de 1 a 1000?

Ae vai exemplo:

function IntPrime(Value: Integer): Boolean;
var
 i : integer;
begin
  Result := False;
  Value := Abs(Value);
  if Value mod 2 <> 0 then begin
     i := 1;
     repeat
     i := i + 2;
     Result:= Value mod i = 0
     until Result or ( i > Trunc(sqrt(Value)) );
     Result:= not Result;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
  for i := 1 to 1000 do
     if IntPrime(i) then
        if i = 1 then Edit2.Text := IntToStr(i)
        else Edit2.Text := Edit2.text+', '+IntToStr(i);
end;

Esse código traz todos os nº primos de 1 a 1000 em um edit, acho que é do jeito que você ta querendo...

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...