Ajuda com exercício de Lógica

15 respostas
R

Caros amigos,

Tenho que desenvolver um programa que calcule o MMC e MDC de dois valores. Será que alguém poderia dar uma força?

Fico muito grato pela atenção.
Rafael F. F.

15 Respostas

Rafael_Nunes

Qual a sua dificuldade, especificamente?

T

Dica: sabendo calcular o MDC, o MMC é direto.

Para calcular o MDC, implemente o algoritmo de Euclides. (Dica: faça primeiro na mão, então use sua cabeça para escrever o algoritmo…)

Para o MMC, se os números forem x e y, então
MMC = X * Y / MDC

R

Valeu thingol,

Eu consegui olha á codificação para achar o MDC, pode estar meio Luso ainda. Mas até trato os casos dos dois números serem primos.

public static int mdc (int y, int x){
		int h, l, r = 0;
		boolean caso;
		
		caso = isPrimo(y);
		
		if (caso){
			caso = isPrimo(x);
			if (caso) return 1;
		}
		
		caso = false;
			
		h=Math.max(y, x);
		l=Math.min(y, x);
				
		while(true){
			r += h;
			if ((r % l) == 0){
				return r;
			}
		}
									
	}

Ai para achar o MMC fiz como você me disse.

public static int mmc (int y, int x){
		int r;
		r= (y * x)/ mdc(y, x);
		return r;
	}

Valeu mesmo pela força...

T

Pergunta - como é que você codificou o “isPrimo”? Usando o crivo de Erastótenes? Só para saber.

R

Tinha um negócio errado no outro código, eu inverti uma coisa. Mas agora está certo. Eu não sei sobre o crivo de Erastótenes, vou postar a codificação do isPrimo também.

public static int mdc (int y, int x){
		int r;
		boolean caso;
		
		caso = isPrimo(y);
		
		if (caso){
			caso = isPrimo(x);
			if (caso) return 1;
		}
		
		r= (y * x)/ mmc(y, x);
		return r;
	}
	
	public static int mmc (int y, int x){
		int h, l, r = 0;
					
		h=Math.max(y, x);
		l=Math.min(y, x);
				
		while(true){
			r += h;
			if ((r % l) == 0){
				return r;
			}
		}
									
	}
	
	public static boolean isPrimo(int y){
		
		if((y==2)||(y==3))
			return true;
			
		if(y==5)
			return true;
		
		if (((y%2) != 0) && ((y%3) != 0))
			if ((y%5) != 0)
				return true;
				
		return false;
	}

Ainda deve estar meio luso... Mas pelo menos agora está funcionando. hehe
Valeu pela ajuda galera.
Rafael F. F.

T

Credo, esse “isPrimo” está totalmente errado. O que ocorre quando você passa o número 1517 (que é 37 * 41) ?

Dica: se você usar o algoritmo de Euclides, como foi mencionado, não é preciso saber se o número é primo ou não. Não precisaria de ficar checando isso. Não fiquei vendo o seu algoritmo, mas não parece ser Euclides.

R

thingol,

Tudo bem, tudo bem, o programa está meio Luso… Mas não está errado se eu passar os números 37, 41 ele produz o resultado certo.

E eu não vi onde está errado o meu método isPrimo, pelo menos todos os números que eu testei ele me retornou o resultado certo… Em que caso ele retorna o resultado errado?

Rafael.

T

Aham, seu código só checa se o número é divisível por 2, 3 ou 5. Se não for divisível por nenhum deles (como é o caso dos primos), resulta true.

Só que ele retorna true para números divisíveis por 7, 11 etc. O menor número para o qual ele retorna uma resposta errada é 77 (que é 7 * 11). Você sabe que 77 nunca foi primo…

R

thingol,

Valeu, agora é só colocar mais uns dois if acho que arruma… Se você puder me passar a codificação para o método isPrimo a prova da falhas eu fico muito grato… Valeu mesmo pela ajuda.
Eu sou novo ainda, um dia eu aprendo.
hahah

Falow
RAfael F. Fernandes

R

Só uma perguntinha, o crivo de Erastótenes é a melhor maneira para se encontrar um número primo?

Rafaelf

T

Aham, existem uns métodos bastante complicados para isso (que são usados em criptografia e certificação digital), mas para o uso do dia a dia (para primos relativamente pequenos) o crivo é suficiente.
Mas como eu disse, para implementar o algoritmo de Euclides, não é preciso saber se o número é primo.

R

tinngol,

Eu vou pesquisar sobre o algoritmo de Euclides, valeu pela ajuda com os números primos.

Rafael

E

tipo, uma maneira de verificar se um numero é primo, mas isso demanda um tempo proporcional ao tamanho do numero é verificar se esse numero é divisivel por todos os numeros menores que sua raiz quadrada… corrijam-me se eu estiver errado

ttatimari

:smiley: Oi!! Sou a tati!!
Vi q tu ajudou outra pessoa com esses exercicios charopes de logica, estou com um grande problema, preciso fazer um fluxograma q leia do teclado um numero N , calcular e imprimir o fatorial do N .Encerrar quando digita N negativo.
N~ precisa ser a resposta apenas uma ajuda!!!

Valeu!!!

E

ok, qual é a sua dúvida?

Criado 8 de junho de 2005
Ultima resposta 24 de jun. de 2005
Respostas 15
Participantes 5