#fatorar: colocar o numero em produto de numeros primos(forma fatorada)
def fatorar(x): #simulado-> fatorar(6)
A=[] #A=[]
for y in range(2,x): #for y in range(2,6): y=[2,3,4,5]
while x%y==0: #enquanto resto da divisao 6/y for 0:
x=x/y #x=6/y-> 6/2,6/3,6/4,6/5-> 6/3=3 e 3/3=1, por isso usar while.
A.append(y) #A=[6/2,6/3,3/3]=[3,2,1]
if sum(A)==0: #se x fosse numero primo, a sua forma fatoriada seria ele mesmo.
A.append(x) #se sum(A)==0 i.e, x%y nunca é 0, entao x é primo
return A #retorna lista [3,2,1]
MDCeMMC.py:
# -*- coding: cp1252 -*-
#Importar a Funçao fatorar do Modulo Fatorar.py
from Fatorar import fatorar
#Loop para reiniciar o programa apos terminado
R=raw_input("Digite Sair para sair, ou qualquer outra coisa para continuar: ").lower()
while R!="sair":
#definir quantos numeros farao parte do calculo
n=input("Quantos numeros? ")
N=list(range(n))
#definir quais numeros
for i in range(n):
N[i]=input("Proximo Numero: ")
#Fatorar esses numeros, salvando em C os valores antigos para uso posterior
C=N
N=map(fatorar,(N))
#Declarar variaveis a serem usadas com seus respectivos valores iniciais
mdc=1
mmc=1
num=2
#Essa funçao ira obter o maior numero primo de todas as fatoraçoes e colocar
#o resultado na variavel num
for z in range(n):
if N[z][-1]>num:
num=N[z][-1]
#Por exemplo, se C=[13,26], entao o maior numero primo é 13, e range vai de 2 a 13+1.
#Agora as compostas de for sao usadas para obter a quantidade de vezes que um fator i
#aparece em cada lista N[j], que é a forma fatorada do numero inserido pelo usuario.
for i in range(2,num+1):
cont=N[0].count(i)
for j in range(n):
if N[j].count(i)>0:
if N[j].count(i)<cont:
cont=N[j].count(i)
else:
cont=0
#se C=[15,30]=[[5*3],[5*3*2]], mdc=1*(5**1)*(3**1)=15
if i**cont>1:
mdc*= i**cont
#MMC
#x= fatores em comum
#Se nao houver fatores em comum x=1
#MMC= (a*b)/x
X=1
#obter a*b, sendo a*b armazenado na variavel mmc
for u in range(len(C)):
mmc*=C[u]
#Testar se o fator x aparece em todo N[y], isto é, se x é fator em comum de todos elementos fatorados
for x in range(2,num+1):
cont=1
for y in range(n):
if N[y].count(x)==0:
cont=0
#Se x for fator em comum, colocar o produto de todos x (todos os fatores em comum) em X
if cont==1:
X*=x
#Dividir mmc por X, obtendo o M.M.C
mmc=mmc/X
print "O M.D.C é %d e o M.M.C é %d."%(mdc,mmc)
R=raw_input("Digite Sair para sair, ou qualquer outra coisa para recomeçar o programa: ").lower()
Pergunta
HarryPotter
Fatorar.py:
MDCeMMC.py:
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.