Ir para conteúdo
Fórum Script Brasil
  • 0

Fatorar, calcular M.D.C e M.M.C


HarryPotter

Pergunta

Fatorar.py:

#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()

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Enfim, o professor passou a questão:

12. Calcule o MDC entre dois números lidos.

e eu pensei: porque dois numeros?porque não n numeros?

dai fiz isso ai.

mas para responder a questao bastava:

x=input("x= ")
y=input("y= ")
mdc=1
if x>y:
    maior=x
else:
    maior=y
for i in range(1,maior):
    if x%i==0 and y%i ==0:
        mdc=i
print mdc
        

Editado por HarryPotter
Link para o comentário
Compartilhar em outros sites

  • 0
Em 5/4/2014 at 08:42, HarryPotter disse:

Enfim, o professor passou a questão:

12. Calcule o MDC entre dois números lidos.

e eu pensei: porque dois numeros?porque não n numeros?

dai fiz isso ai.

mas para responder a questao bastava:


x=input("x= ")
y=input("y= ")
mdc=1
if x>y:
    maior=x
else:
    maior=y
for i in range(1,maior):
    if x%i==0 and y%i ==0:
        mdc=i
print mdc
        

 

PYTHON 3

x=int(input(" x =  "))
y=int(input(" y =  "))
mdc=1
if x>y:
    m = x
else:
    m= y
for i in range(1,m):
    if x%i==0 and y%i ==0:
        mdc=i
print (mdc)
 

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...