Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
<%
function isPrimo(numero) 'Verifica se um número é primo
contador = 2
primo = true
do until contador = numero
if (numero mod contador) = 0 then 'Caso a divisão dele com qualquer número emntre 2 e ele mesmo dê resto 0, então ele não [e primo
primo = false
exit do
else
contador = contador + 1
end if
loop
isPrimo = primo
end function
function isDivisivel(n1,n2) 'Verifica se um número é divisível por outro
if clng(n1/n2) <> cdbl(n1/n2) then
isDivisivel = false
else
isDivisivel = true
end if
end function
function decompor(numero) 'Decompõe um número
primos = ""
temp = ""
for i=2 to numero
if isPrimo(i) then 'Verific se um número é primo, se for, coloca-o na variável "primos"
if not primos="" then
primos=primos&","
end if
primos = primos & i
end if
next
primos = split(primos,",") 'Transofmra em uma array
for each primo in primos
if isDivisivel(numero,primo) then
do until isDivisivel(numero,primo) = false 'Divide o máximo de vezes possível o número por cada número primo
numero = numero/primo
if not temp = "" then
temp = temp&","
end if
temp = temp&primo
loop
end if
next
decompor = temp
end function
function MMC(numeros)
numeros = split(numeros,",") 'Transforma os números em array
dim decomposto
redim decomposto(ubound(numeros))
a = 0
for each n in numeros 'Decompõe os números e coloca os números já decompostos em uma array
if isPrimo(n) then
decomposto(a) = n
else
decomposto(a) = decompor(n)
end if
a=a+1
next
finais = ""
for i = 0 to ubound(decomposto) 'Transforma todos os decompostos dentro das arrays em arrays.
decomposto(i) = split(decomposto(i),",")
next
for h = 0 to ubound(decomposto) 'Fazer em todos da array decomposto...
for j = 0 to ubound(decomposto(h)) 'Fazer em todos das arrays da array decomposto...
num = decomposto(h)(j) 'pega o número
if not num = "" then 'Verifica se o número já foi usado, se não...
if not finais = "" then 'Verifica se adiciona vígula ou não
finais = finais&","
end if
finais = finais&num 'Coloca o número na var finais
for k = 0 to ubound(decomposto) 'Fazer em todos da array decomposto...
for l = 0 to ubound(decomposto(k)) 'Fazer em todos das arrays da array decomposto... Aqui o script vai tirar o número usado uma vez de cada array de decomposto, se existir
if decomposto(k)(l) = num then
decomposto(k)(l) = ""
exit for
end if
next
next
end if
next
next
resultado = 1
finais = split(finais,",")
for p = 0 to ubound(finais) 'Multiplica os números de finais
resultado = resultado*finais(p)
next
MMC = resultado 'Retorna o resultado
end function
'----------------------------------
numeros = "2,2,6,8"
response.write MMC(numeros)
%>
Olá.. Eu otimizei o código, deixei ele mais identado e com comentários... Se algum moderador puder substituir o primeiro post com o código otimizado agradeceria muito.
<%
function isPrimo(numero) 'Verifica se um número é primo
contador = 2
primo = true
do until contador = numero
if (numero mod contador) = 0 then 'Caso a divisão dele com qualquer número emntre 2 e ele mesmo dê resto 0, então ele não [e primo
primo = false
exit do
else
contador = contador + 1
end if
loop
isPrimo = primo
end function
function isDivisivel(n1,n2) 'Verifica se um número é divisível por outro
if clng(n1/n2) <> cdbl(n1/n2) then
isDivisivel = false
else
isDivisivel = true
end if
end function
function decompor(numero) 'Decompõe um número
primos = ""
temp = ""
for i=2 to numero
if isPrimo(i) then 'Verific se um número é primo, se for, coloca-o na variável "primos"
if not primos="" then
primos=primos&","
end if
primos = primos & i
end if
next
primos = split(primos,",") 'Transofmra em uma array
for each primo in primos
if isDivisivel(numero,primo) then
do until isDivisivel(numero,primo) = false 'Divide o máximo de vezes possível o número por cada número primo
numero = numero/primo
if not temp = "" then
temp = temp&","
end if
temp = temp&primo
loop
end if
next
decompor = temp
end function
function MMC(numeros)
numeros = split(numeros,",") 'Transforma os números em array
dim decomposto
redim decomposto(ubound(numeros))
a = 0
for each n in numeros 'Decompõe os números e coloca os números já decompostos em uma array
if isPrimo(n) then
decomposto(a) = n
else
decomposto(a) = decompor(n)
end if
a=a+1
next
finais = ""
for i = 0 to ubound(decomposto) 'Transforma todos os decompostos dentro das arrays em arrays.
decomposto(i) = split(decomposto(i),",")
next
for h = 0 to ubound(decomposto) 'Fazer em todos da array decomposto...
for j = 0 to ubound(decomposto(h)) 'Fazer em todos das arrays da array decomposto...
num = decomposto(h)(j) 'pega o número
if not num = "" then 'Verifica se o número já foi usado, se não...
if not finais = "" then 'Verifica se adiciona vígula ou não
finais = finais&","
end if
finais = finais&num 'Coloca o número na var finais
for k = 0 to ubound(decomposto) 'Fazer em todos da array decomposto...
for l = 0 to ubound(decomposto(k)) 'Fazer em todos das arrays da array decomposto... Aqui o script vai tirar o número usado uma vez de cada array de decomposto, se existir
if decomposto(k)(l) = num then
decomposto(k)(l) = ""
exit for
end if
next
next
end if
next
next
resultado = 1
finais = split(finais,",")
for p = 0 to ubound(finais) 'Multiplica os números de finais
resultado = resultado*finais(p)
next
MMC = resultado 'Retorna o resultado
end function
'----------------------------------
numeros = "2,2,6,8"
response.write MMC(numeros)
%>
Depois desta belíssima contribuição este pedido é mais que um ordem
Obrigado (Y)
ótima contribuição augusto