Ir para o conteúdo

Tirar Mmc De Números


Criado por Augusto Claro, Out 04 2010 19:11

Não há respostas para este tópico
  • Por favor, faça o login para responder

#1 Augusto Claro

Augusto Claro
  • Augusto Claro
  • Colaborador
  • 1 Revisões

Revisou 04 outubro 2010 - 19:11

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


Editei este tópico com uma versão otimizada (identada e com comentários) do código.




1 usuário(s) está(ão) lendo este código

1 membro(s), 0 visitante(s) e 0 membros anônimo(s)