Gostaria de saber como criar um programa simples para calcular o MDC(x,y) e verificar se esse numero que retornou é par.
Clareando as ideias
classMDC{publicstaticintCalcularMDC(intx,inty){/**Não sei como fazer isso*/}publicstaticvoidmain(Stringargs[]){inta=1920,b=1650;intresp;resp=CalcularMDC(a,b);if(resp%2==0)System.out.println("PAR");elseSystem.out.println("IMPAR");}}
Álgebra I -> divisibilidade -> MDC e MMC -> Algoritmo de Euclides
Apesar de ser um algoritmo de fácil compreensão, não é trivial. Na Wikipedia tem uma explicação e uma implementação mas eu aconselharia fazê-la sem ser recursiva para aprender. Acho que isso mata boa parte dos seus problemas, já que você já sabe ver se um número é par ou não.
No meu tempo aprendia-se MMC e MDC no ensino fundamental (lá pela 6ª ou 7ª série do primeiro grau, como se dizia naquele tempo). O algoritmo usado era o de Euclides, e você não precisa fazê-lo recursivamente; se souber fazê-lo em lápis e papel, é realmente muito simples.
maquiavelbona
thingol:
No meu tempo aprendia-se MMC e MDC no ensino fundamental (lá pela 6ª ou 7ª série do primeiro grau, como se dizia naquele tempo). O algoritmo usado era o de Euclides, e você não precisa fazê-lo recursivamente; se souber fazê-lo em lápis e papel, é realmente muito simples.
Na minha época ensinaram por fatoração. O Kumon que ensina hoje em dia pelo Algoritmo de Euclides.
Essa implementação é baseada em uma das soluções proposta na Wikipedia (http://pt.wikipedia.org/wiki/Mdc), de como calcular o MDC de dois números, e foi feito da forma recursiva.
E provalmente você não aprendeu nada. :)
Esse tipo de questão em geral é coisa de faculdade e não se pode usar essas coisas.
Até!
B
Bruno_Laturner
maquiavelbona:
E provalmente você não aprendeu nada.
Esse tipo de questão em geral é coisa de faculdade e não se pode usar essas coisas.
Ver código fonte é para essas coisas.
Lá da pra ver que eles implementam o algorítmo de euclides. Ate fazem referência de sua implementação à “Algorithm B from Knuth section 4.5.2”. Daí basta caçar o livro do Knuth.
andrey.oliveira
Sem querer desmerecer a resposta, nem puxar a sardinha pro meu lado, usando gcd facilita a coisa demais… e a lógica, onde fica??? Numa faculdade, usar um esquema desses é pedir pra tirar um zero bonito…
Mas tá valendo, pelo menos a gente fica sabendo q tem a forma mais fácil de fazer a coisa…
Abraços!!!
M
mfellipe
Tem razão, não esqueço de um cara aqui na faculdade, em plena aula de recursão, num exercício simples de fatorial, o cara estava se matando para encontrar uma tal feunção Fib pronta…
andrey.oliveira
Fibonacci é outra lógica q os professores de faculdade adoram…
Parece ser complicada, mas na verdade é só verificar q o valor atual vai ser a soma dos dois anteriores na sequência e montar a lógica…
Pra quem não lembra, Fibonacci é uma sequência que começa com 0 e 1, e o próximo número é sempre a soma dos dois anteriores… algo como:
0,1,1,2,3,5,8,13,21,34,…
Abraços!!!
blackfalcon
andrey.oliveira:
Fibonacci é outra lógica q os professores de faculdade adoram…
Parece ser complicada, mas na verdade é só verificar q o valor atual vai ser a soma dos dois anteriores na sequência e montar a lógica…
Pra quem não lembra, Fibonacci é uma sequência que começa com 0 e 1, e o próximo número é sempre a soma dos dois anteriores… algo como:
0,1,1,2,3,5,8,13,21,34,…
Abraços!!!
Seria legal fazer um algoritmo desse… nao é certeza de conseguir mas valeu cara, voce me deu uma ideia
Abraços
Andre_Brito
maquiavelbona:
Álgebra I -> divisibilidade -> MDC e MMC -> Algoritmo de Euclides
Apesar de ser um algoritmo de fácil compreensão, não é trivial.
Até!
Isso me lembra o Algoritmo de Kruskal
andrey.oliveira
Cara, Fibonacci, pra quem quer “brincar” um pouco com lógica, é excelente… não é à toa q os professores de faculdade adoram… geralmente pedem pra descobrir o n-ésimo número da sequência…
Depois vou tentar desenvolver um método pra isso… se conseguir, depois eu posto aqui… aliás, se alguém conseguir, tanto Fibonacci qto MDC ou qualquer outra q mexa com a lógica, posta aqui o desafio pra galera!!
Abraços!!!
Andre_Brito
Eu tive que fazer fibonacci no primeiro ano da faculdade… me bati bastante, mas fiz!
No segundo ano tive que fazer fibonacci recursivo, mas nem me lembro como fiz.
Um código bem ‘porco’ de fibonacci normal tá aqui:
Acho que tem jeitos de melhorar bastante ainda (principalmente no tempo de execução). Dá pra fazer recursivo também. Enfim…
Pra quem gosta desses desafios legais, tem o site do UVa Judge Online, Topcoder e os tribonaccis e tetranaccis da vida.
B
Bruno_Laturner
Essa conversa me lembra uma frase que li na internet:
“Não contrate alguém que implemente fatorial com recursão.” Ou será que era fibonacci?
andrey.oliveira
Bom, qto a recursividade, não sei discutir qdo é melhor ou não usar… falo somente pela implementação q eu postei aqui, q me pareceu ser bem mais fácil de implementar usando recursividade (embora seja completamente possível implementar uma solução para calcular o MDC sem usá-la…)
Uma coisa deve-se dizer: mais importante do que usar ou não, o mais importante é fazer de uma forma eficiente…
Abraços!!!
andrey.oliveira
Ae galera, a quem possa interessar, uma implementação pra calcular o MMC (Mínimo Múltiplo Comum):
Como pode ser visto, não usei recursividade dessa vez.
Se alguém tiver alguma “resposta” além dessa, compartilha com a galera!!!
Abraços!!!
maquiavelbona
Ainda em Álgebra I, você aprende que:
sendo
a, b inteiros;
d = MDC(a,b);
m =MMC(a,b);
Então:
md=|ab|
Partindo disso e tendo o algoritmo de calcular MDC, não terás nenhuma dificuldade. Assim não precisa de um outro algoritmo especializado nisso.
Até!
andrey.oliveira
Fazendo um cálculo rápido aqui, realmente tenho q te dar razão, a regra é válida sim… ou seja, a partir de qualquer um dos dois (MMC ou MDC) eu consigo calcular o outro…
Mas convenhamos: qual a graça (sem desmerecer a importância dessa regra)?? Afinal, o esquema é desenvolver a lógica…
Abraços!!!
maquiavelbona
andrey.oliveira:
Fazendo um cálculo rápido aqui, realmente tenho q te dar razão, a regra é válida sim… ou seja, a partir de qualquer um dos dois (MMC ou MDC) eu consigo calcular o outro…
Mas convenhamos: qual a graça (sem desmerecer a importância dessa regra)?? Afinal, o esquema é desenvolver a lógica…
Abraços!!!
Não tiro sua vontade, mas em questão de eficiência é bem legal usar os artifícios matemáticos que se tem. Assim não precisamos guardar várias maneiras de calcular as coisas.
Até!
andrey.oliveira
maquiavelbona:
andrey.oliveira:
Fazendo um cálculo rápido aqui, realmente tenho q te dar razão, a regra é válida sim… ou seja, a partir de qualquer um dos dois (MMC ou MDC) eu consigo calcular o outro…
Mas convenhamos: qual a graça (sem desmerecer a importância dessa regra)?? Afinal, o esquema é desenvolver a lógica…
Abraços!!!
Não tiro sua vontade, mas em questão de eficiência é bem legal usar os artifícios matemáticos que se tem. Assim não precisamos guardar várias maneiras de calcular as coisas.
Até!
Não tenha dúvida, vc tem toda razão. Se fosse um sistema a ser feito, eu tb usaria, não só os recursos matemáticos, como tb eventuais métodos existentes pra facilitar e fazer um desenvolvimento mais rápido. Mas um programador que se preze tb tem q ter um “quê” de matemático, ou seja, “brincar” com lógicas como essa só tem a acrescentar… eu, pelo menos, gosto bastante de desenvolver lógicas assim…