/*
 * Problema 10.  Escreva uma função com protótipo
 * 
 * int divide_um(int *m, int *n, int d);
 * 
 * que recebe três inteiros positivos como parâmetros e devolve 1 se d
 * divide pelo menos um entre *m e *n, e devolve 0 caso
 * contrário.  Fora isso, se d divide *m, divide_um divide *m por d, e
 * o mesmo para *n.  Finalmente, escreva um programa que lê dois
 * inteiros positivos m e n e calcula, usando a função acima, o mínimo
 * múltiplo comum entre m e n. 
 */

#include <stdio.h>

#define TRUE 1
#define FALSE 0

int divide_um(int *m, int *n, int d);
int mmc(int m, int n);

int main(int argc, char *argv[])
{
  int m, n;

  scanf("%d %d", &m, &n);
  printf("mmc(%d, %d) = %d\n", m, n, mmc(m, n));
    
  return 0;
}

int mmc(int m, int n)
{
  int d = 2, mmc = 1;

  while (m > 1 || n > 1) {
    while (divide_um(&m, &n, d)) 
      mmc *= d;
    d++;
  }
  
  return mmc;
}

int divide_um(int *m, int *n, int d)
{
  int divide = FALSE;

  if (*m % d == 0) {
    divide = TRUE;
    *m /= d;
  }

  if (*n % d == 0) {
    divide = TRUE;
    *n /= d;
  }

  return divide;
}
