GARANTIR DESCONTO

Fórum Minimo Multiplo Comum #344369

10/08/2007

0

Pessoal, alguém já fez algum procedimento que cacula o minimo multiplo comum de varios valores?


Zumbi

Zumbi

Responder

Posts

11/08/2007

Emerson Nascimento

não sei se já existe alguma função pronta no Delphi. de qualquer forma criei esta. veja se te ajuda em algo:
function MMC(Valores: array of integer): extended;
{para o perfeito funcionamento desta rotina,
 adicione a unit Math na cláusula uses}
var
  fatoracao: array of array[0..1] of integer;
  divisor, i, j, n, d, r: integer;
  ok: boolean;
begin
  result := 1;

  // efetua a fatoração de cada elemento do array
  for r := 0 to High(Valores) do
  begin
    n := Valores[r];
    divisor := 2;

    repeat
      j := 0; ok := false;

      // verifica se é uma divisão exata
      if Frac(n / divisor) = 0 then
        while Frac(n / divisor) = 0 do
        begin
          inc(j);
          n := (n div divisor);
        end;

      if j > 0 then
      begin
        // verifico se a base já não existe na lista
        for d := 0 to High(fatoracao) do
          if fatoracao[d,0] = divisor then
          begin
            ok := true;
            // se a base existir, verifico se o novo expoente é maior
            // do que aquele previamente gravado
            if fatoracao[d,1] < j then
              fatoracao[d,1] := j;
            break;
          end;

        // caso não encontre a base, crio um novo elemento com essa base
        if not ok then
        begin
          SetLength(fatoracao, Length(fatoracao)+1);
          fatoracao[High(fatoracao),0] := divisor;
          fatoracao[High(fatoracao),1] := j;
        end;
      end;

      // incremento o divisor
      if divisor = 2 then
        inc(divisor)
      else
        inc(divisor, 2)
    until (n = 1);
  end;

  // calcula o resultado
  for i := 0 to High(fatoracao) do
    result := result * power(fatoracao[i,0], fatoracao[i,1]);
end;

exemplo de uso:
var
  result_mmc: extended;
begin
  result_mmc := MMC([2, 2, 4, 6, 9]);
  ShowMessage(FloatToStr(result_mmc));

  result_mmc := MMC([36, 90, 72]);
  ShowMessage(FloatToStr(result_mmc));
end;



Responder

Gostei + 0

11/08/2007

Marco Salles

outro modo:

function MMC(Valores: array of integer): extended;
  procedure Computar(r,i:integer;var fim:integer;var computer:Boolean);
    begin
      if (valores[r] mod i) = 0 Then
         begin
           Computer:=true;
           Valores[r]:=Valores[r] div i
         end;
      fim:=fim*valores[r];
    end;
var
  r,i,Fim:integer;
  computer:boolean;
begin
 i:=2;
 result:=1;
 repeat
   begin
        Fim:=1;
        computer:=False;
        for r:= 0 To high(valores) do
          if Valores[r] > 1 Then
            computar(r,i,fim,computer);
       if computer Then
        result:=result*i
       else
        i:=i+1;
    end;
   until
    (Fim = 1);
end;


mas minha bateria d etestes foi quase nula :lol: :lol:


Responder

Gostei + 0

13/08/2007

Marco Salles

Depois que eu postei , este tópico , lembrei dos numeros primos... :cry:
:cry: :cry: :cry:

então amigo , esquece... Qualquer algoritmo para Achar MMC so vai ser completo se conseguir simultaneamente um Algoritmo para Determinar Numeros Primos... Se não me engano ate hoje não apareceu um Algoritmo para isto.. ´Dizem´ que uns matemáticos Indianos Resolveram , mas nada chegou atê meu conhecimento... Salvo engano pode ser conversa

Voce pode limitar a Utilização desse método para Detreminar MMC , para ate um Determinado Inteiro... Imagine Determinar MMC(A,B,C,...n) Aonde A,B,C,...n são Primos entre Si e são numeros Grandes

A lógiga empregada para Determinar MMC é a principio e sequencial.. e ai teremos um enorme processamento de divisões ate verificar que os Numeros A,B,C,...n Sáo Primus... E considerando que estes Numeros são ´Grandes´ ai esquece...

Melhorar o Algorimo ate podemos , pois exisitem tecnicas para analisar de maneira um [u:6c44796f38][b:6c44796f38]´pouco mais eficiente´[/b:6c44796f38][/u:6c44796f38] se um Numero é Primo ... Mas mesmo assim é uma tarefa pesada ao se tratar de numeros Primos ´Grandes´

No mais vale a intenção :lol:


Responder

Gostei + 0

05/09/2007

Marco Salles

um mes pensando nisso acredita ????

Criar algo que facilite este processamento...

Cheguei a resolver com pouquissimas linhas

Mas estou vendo com alguns amigos matemáticos se o desenvolvimento
matemático para resolver o problema se ja existe ou se é algo novo...

evitar plágio entende ... ele ficou de me dar a resposta :lol:


Responder

Gostei + 0

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

Aceitar