Fórum Minimo Multiplo Comum #344369
10/08/2007
0
Zumbi
Curtir tópico
+ 0Posts
11/08/2007
Emerson Nascimento
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;
Gostei + 0
11/08/2007
Marco Salles
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:
Gostei + 0
13/08/2007
Marco Salles
: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:
Gostei + 0
05/09/2007
Marco Salles
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:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)