/*
 * 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 main(int argc, char *argv[])
{
  int m, mm, n, nn, d = 2;
  long mmc = 1;

  scanf("%d %d", &m, &n);
  mm = m; nn = n;

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

  printf("mmc(%d, %d) = %ld\n", mm, nn, mmc);
    
  return 0;
}

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;
}
