Ir ao conteúdo
  • Cadastre-se

C Algoritmo para cálculo do MMC e do MDC usando divisões sucessivas


ningumx

Posts recomendados

Alguém pode me ajudar com este código? Ele só lê as variáveis e depois não faz mais nada.

#include <stdio.h>

int main(int argc, char *argv[]) {
	int a,b;
	printf("Digite um numero inteiro e positivo: ");
	scanf("%d",&a);
	printf("Digite outro numero inteiro e positivo: ");
	scanf("%d",&b);
	
	int mmc = 1, mdc = 1, primo, p, limite;
	
	while(a != 1 && b != 1){
	    if(a % primo == 0)
	        a = a / primo;
	    if(b % primo == 0)
	        b = b / primo;
	    mmc = mmc * primo;
	 
	   if(a % primo == 0){
	        a = a / primo;
	        if(b % primo == 0)
	            b = b / primo;
	            mdc = mdc * primo;
	   } else
	        if(b % primo == 0)
	            b = b / primo;
	        
	    if(primo == 2) 
	        primo = 3;
        else
        do{
            primo = primo + 2;
            p = 1;
            limite = primo / 2;
            do{
            p = p + 2;
            } while (primo % p != 0 && p < limite);
            } while (primo % p == 0);
	}
	
	printf("MMC = %d\n",mmc);
	printf("MDC = %d",mdc);
	
	
	return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@ningumx @ningumx    precisa inicializar as variáveis ,  e seu código  está em um loop eterno nesse while :

#include <stdio.h>
int main(int argc, char *argv[])
{
  int a,b;
  printf("Digite um numero inteiro e positivo: ");
  scanf("%d",&a);
  printf("Digite outro numero inteiro e positivo: ");
  scanf("%d",&b);

  int mmc = 1;
  int mdc = 1;
  int primo;  /// variavel não inicializada
              /// tem um valor , porém desconhecido
  int p;
  int limite;

  while(a != 1 && b != 1)
  {
    if(a % primo == 0)   /// qual o valor de primo ?
      a = a / primo;
    if(b % primo == 0)
      b = b / primo;
    mmc = mmc * primo;
    if(a % primo == 0)
    {
      a = a / primo;
      if(b % primo == 0)
        b = b / primo;
      mdc = mdc * primo;
    }
    else
    {
      if(b % primo == 0)
        b = b / primo;
      if(primo == 2)
        primo = 3;
      else
        do
        {
          primo = primo + 2;
          p = 1;
          limite = primo / 2;
          do
          {
            p = p + 2;
          }while ( primo % p != 0 && p < limite );
        }while ( primo % p == 0 );
    }
  }
  printf("MMC = %d\n",mmc);
  printf("MDC = %d",mdc);
  return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Arrumei o código e acrescentei outras coisas.  A resposta para alguns números está correta, mas para outros, não, por que será?

#include <stdio.h>

int main(int argc, char *argv[]) {
  int resposta = 1;
  while(resposta == 1){
  
  	int a,b;
  	printf("Digite um numero inteiro e positivo: ");
  	scanf("%d",&a);
  	printf("Digite outro numero inteiro e positivo: ");
  	scanf("%d",&b);

  	int mmc = 1;
  	int mdc = 1;
  	int primo;  
  	int i = 1, j = 1, k = 1;

  	if((a > 0) && (b > 0)){
  		while(a != 1 && b != 1){
    		for(primo = 2 ; primo > 0 ; primo++){
        		if((a % primo == 0) && (b % primo == 0)){
            		a = a / primo;
            		b = b / primo;
            		i = i * primo;
            		mdc = mdc * primo;
        		}
        		if((a % primo == 0) && (b % primo != 0)){
            		a = a / primo;
            		j = j * primo;
        		}
        		if((b % primo == 0) && (a % primo != 0)){
            		b = b / primo;
            		k = k * primo;
        		}
        		mmc = i * j * k;
    		}
  		}
  	
  		printf("MMC = %d\n",mmc);
  		printf("MDC = %d\n",mdc);
  	
  	} else 
		printf("Valor invalido!");
		
  	printf("\nCalcular novamente? \n Sim - digite 1 \n não - digite 2\n");
  	scanf("%d",&resposta);
  }

  return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@ningumx    você está querendo fazer os cálculos como se fosse no papel   ?    , colocando um número ao lado do outro e então ir calculando  ?  ,  um modo de calcular o MMC pode ser assim 

#define _WIN32_WINNT 0x600
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/*
*
*   esse coDigo Originalmente era do compilador VisualG 3.0
*
*/
int prototipo(int , int , int* );
int main()
{
  HANDLE _h = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute( _h , 15 + (12 << 4 ) );
  int mmc, aux,i,num1=28,num2=40,flg;
  for( i=2; i<=num2; i++ )
  {
    aux = num1 * i;
    flg = aux / num2;   /// divisOes  sucessivas
    /// if( aux % num2 == 0 )  para não usar o operador % mod
    if(flg * num2 == aux )
    {
      mmc = aux;
      break;
    }
  }
  printf("MMC DE %d e %d = %d\n\n\ttecle Enter      \n",num1,num2,mmc);
  getchar();
  SetConsoleTextAttribute( _h , 7 + ( 0 << 4 ) );
  printf("\n\n\n");
  return 0;
}
int prototipo(int a , int b , int* c )
{
  return 0;
}

 

e para colocar os resultados um ao lado do outro como no papel  , precisa adaptação .     

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!