Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

augustoclaro

Tirar MMC de números

Recommended Posts

<%

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)

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ótima contribuição augusto

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois desta belíssima contribuição este pedido é mais que um ordem

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.