GARANTIR DESCONTO

Fórum números primos #280027

04/05/2005

0

pessoal, preciso fazer um pequeno programa matemático que descubra se o número fornecido pelo usuário é PRIMO ou não...como faço isso essa análise?


Rafael Santana

Rafael Santana

Responder

Posts

04/05/2005

Rjun

function Primo(numero: integer): boolean;
var
  Divisores: integer;
  i: integer;
begin
  result := false;
  Divisores := 0;

  for i := 1 to numero do
    if ((numero mod i) = 0) then
      inc(Divisores);

  if (numero = 1) or (Divisores = 2) then
    result := true;

end;



Responder

Gostei + 0

04/05/2005

Rafael Santana

amigo, vc poderia explicar esse código?

obrigado


Responder

Gostei + 0

04/05/2005

Rjun

Bom, como você deve saber, número primo e todo número natural, maior que 1 que só tem 2 divisores (o número 1 e o próprio numero).

Entao, fiz um loop do numero 1 ate o numero informado. Em cada volta do loop faço a divisao do numero pelo indice e vejo se o resto é zero. Se for zero, entao o indice é um divisor do numero.

Incremento a variavel Divisores e ao final da funcão vejo se o número de divisores é igual a 2. Se for, então o numero informado é um numero primo.

A função precisa de uma correçao no final. O código

  if (numero = 1) or (Divisores = 2) then 
    result := true; 


deve ser trocado por :

  if Divisores = 2 then result := true;



Responder

Gostei + 0

04/05/2005

Brunobaco

function Primo(numero: integer): boolean; var Divisores: integer; i: integer; begin result := false; Divisores := 0; for i := 1 to numero do if ((numero mod i) = 0) then inc(Divisores); if (numero = 1) or (Divisores = 2) then result := true; end;


Amigo, a variavel numero é o numero passado como parametro. Então entra no laço for. Qdo se faz um numero mod i, o codigo está pegando o resto da divisão apenas, e não quociente. Se o resultado for zero (ou seja, divisivel pelo numero), incrementa a variável divisores. após terminar o for, verifica se o numero passado é o numero 1 (o numero 1 é primo, e ele só será dividido por 1, ou seja, uma unic vez), e se divisores for igual a zero, significa que ele só foi dividido 2 vezes, uma vez por 1 (todos são divisíveis por 1) e por ele mesmo. Isso significa que ele é primo.

Explicação: Um número primo é aquele que é divisivel por 1 e por ele mesmo.

Entendeu??

Espero ter ajudado

Bruno Augusto


Responder

Gostei + 0

04/05/2005

Edilcimar

você não precisa checar até o valor do número e sim até a raiz quadrada dele, por ex. para saber se 1 milhão é primo basta checar até a raiz de 1 milhão (1 mil), se não for primo até aí, daí para frente não será


Responder

Gostei + 0

04/05/2005

Marco Salles

você não precisa checar até o valor do número e sim até a raiz quadrada dele, por ex. para saber se 1 milhão é primo basta checar até a raiz de 1 milhão (1 mil), se não for primo até aí, daí para frente não será


O Problema é que a Grande muaioria de Números , Não retornan Raiz Quadrada Inteiras
Por exemplo ::: 12346787980980901 é Primo ?????
Sei la:???
e sua raiz quadrada é 3513799.65008 :cry:


Responder

Gostei + 0

04/05/2005

Edilcimar

se até o seu número 3513799.65008, desprezadas as casas decimais, ele for primo daí para frente será, então basta checar até 3513799


Responder

Gostei + 0

04/05/2005

Andremuller

o mais importante é parar no momente em que achou o terceiro divisor

function Primo(numero: integer): boolean;
var
  Divisores: integer;
  i: integer;
begin
  result := false;
  Divisores := 0;

  for i := 1 to numero do
    if ((numero mod i) = 0) then
    begin
      inc(Divisores);
      if Divisores > 2 then
        Break;
    end;
  if (numero = 1) or (Divisores = 2) then
    result := true;

end; 



Responder

Gostei + 0

04/05/2005

Edilcimar

no múmero primo o terceiro divisor será ele próprio. se utilizar assim e o número for grande vai fazer conta desnecessária, faça o cálculo de tempo para verificar se o número 4 bilhoes e 1 é primo e calcule o tempo, depos faça da minha maneira e veja o tempo ganho


Responder

Gostei + 0

04/05/2005

Marco Salles

se até o seu número 3513799.65008, desprezadas as casas decimais, ele for primo daí para frente será, então basta checar até 3513799

Sera :?: :?:
Que para analisar o Numero 12346787980980901 a gente analisa o Numero 3513799 :?: :?: :?:

Bem , o fato é que o assunto é polemico:

Ver

The Electronic Frontier Foundation is offering a $100,000 award to the first person or group to discover a ten million digit prime number! fonte: http://www.mersenne.org/


e mesmo outro Post interresante:

http://forum.devmedia.com.br/viewtopic.php?t=41137&highlight=primos&sid=f1a58c8990777a29760a6189af124603


Responder

Gostei + 0

04/05/2005

Rjun

você não precisa checar até o valor do número e sim até a raiz quadrada dele, por ex. para saber se 1 milhão é primo basta checar até a raiz de 1 milhão (1 mil), se não for primo até aí, daí para frente não será


Bom, seguindo a lógica para saber se 25 é primo, bastaria chegar até 5.
5 é primo mas 25 não, ja que 25 é divisivel por 1, 5, e 25. Então acho que sua lógica esta errada. Se alguém tiver outra sugestão posta aí.


Responder

Gostei + 0

04/05/2005

Edilcimar

Desculpe o engano na escrita, o certo é se ele não for primo até o número 3513799.65008, desprezadas as casas decimais, daí para frente ele NÃO será, portanto basta checar até 3513799. Isto é uma regra matemática. O probelma de achar um primo com 10 milhões de dígitos é que a raíz quadrada do mesmo anda terá mais de 3 mil dígitos, você se habilita a gastar anos para o computador fazer este tipo de conta?


Responder

Gostei + 0

04/05/2005

Andremuller

pois é, só que 4 bilhões não é primo e faça a sua maneira e a minha (que só completei a idéia do colega não é propriamente minha idéia), na minha ele já cai fora nas primeiras iterações.

O negócio então é fazer um mix das duas idéias.
Se dá pra fazer só até a raiz quadrada, o que pode ser porque não tenho certeza, melhor, só que de qualquer forma deve-se parar ao encontrar o terceiro divisor


Responder

Gostei + 0

04/05/2005

Massuda

Bom, seguindo a lógica para saber se 25 é primo, bastaria chegar até 5. 5 é primo mas 25 não, ja que 25 é divisivel por 1, 5, e 25. Então acho que sua lógica esta errada. Se alguém tiver outra sugestão posta aí.
Pelo que me lembro, a regra é essa mesma que o colega Edilcimar postou... basta testar até a raiz quadrada do valor testado.

Isso parte do princípio que todo número natural não nulo é divisível por 1 e por ele próprio; qualquer outro divisor estará entre 2 e a raiz quadrada do valor testado.


Responder

Gostei + 0

04/05/2005

Edilcimar

é isto aí massuda, a idéia é esta que você disse
para saber se o número 25 é primo basta ir de 1 até a raiz de 25 (que é 5), se até aí o número só for divisível por 1 então ele é primo, como 25 é divisível por 5 então 25 não é primo


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar