-----------------------------------------------------------------------
                Mais malhas encaixadas  
=======================================================================

/*
 * Sabe-se que um número da forma n^3 (n ao cubo) é igual `a  soma de n ímpares
 * consecutivos.
 * Exemplo: 1^3= 1, 2^3= 3+5, 3^3= 7+9+11,  4^3= 13+15+17+19,...
 * Dado m, determine os ímpares consecutivos cuja soma é igual a n^3,
 * para n assumindo valores de 1 a m
 */

#include <stdio.h>

int main() {
  int n, m, i, inicio, soma;

  printf("Digite o valor de m: ");
  scanf("%d", &m);

  for (n = 1; n <= m; n++) {
    /* Trecho para procurar o inicio (primeiro impar) de uma sequencia */
    /* de n impares consecutivos cuja soma e ' igual a n ^3            */ 
    soma = 0;
    for (inicio = 1; soma != n * n * n; inicio = inicio + 2) {
      soma = 0;
      for (i = 0; i < n; i++)
	soma = soma + (inicio + 2*i);  /* a partir de "inicio" vamos considerando os n-1 impares consecutivos */
                                       /* somando inicio + 2 ,  inicio + 4,  inicio + 6, etc...  */
      /* Em "soma" temos a soma dos n impares  a partir de "inicio" */                                          
      /* Precisamos testar se tal "soma" e ´ igual a n ao cubo ---  */    
      /* isto e´ testado no "for" mais externo                      */
    }
    inicio = inicio - 2;

  /** aqui sabemos que "inicio" e ´ o primeiro impar da sequencia procurada **/ 

    printf("%d*%d*%d = %d", n, n, n, inicio);
    for (i = 1; i < n; i++)
      printf("+ %d", inicio + 2*i);
    printf("\n");    
  }

  return 0;
}

--------------------------------------------------------
/*
 * Outra solução (usando o fato de que sabemos qual é o primeiro
   numero da sequencia de n impares cuja soma produz n^3)
 */ 


#include <stdio.h>


int main() {
  int m,        /* dado de entrada */
      n, i, 
      inicio;   /* primeiro dos impares de uma sequencia que soma n^3 */

  printf("Digite o valor de m: ");
  scanf("%d", &m);

  inicio = 1;
  for (n = 1; n <= m; n++) {
    printf("%d*%d*%d = %d", n, n, n, inicio);
    for (i = 1; i < n; i++)
      printf("+%d", inicio + 2 * i);
    inicio = inicio + 2 * n;           /* inicio da proxima sequencia */
    printf("\n");    
  }

  return 0;
}

==================================

/* 
 * arquivo: decomposicao.c
 * -----------------------
 * Dado um número inteiro positivo, determine a sua decomposição em fatores
 *  primos calculando também a multiplicidade de cada fator.
 */

#include <stdio.h>

int main()
{
  int n;       /* numero dado */
  int fator;   /* candidato a fator do numero dado */
  int mult;    /* multiplicidade de fator */


  printf("Decomponho um numero dado em fatores primos.\n");
  printf("Entre com o numero (> 1) a ser decomposto: ");
  scanf("%d", &n);
  printf("Decomposicao de %d em fatores primos:\n", n);  

  fator = 2;
  while (n > 1) 
    {
      mult = 0;
      while (n % fator == 0) 
        {
          mult ++;
          n = n / fator; 
        }
      if (mult != 0) 
        {
          printf("  fator %d multiplicidade %d\n", fator, mult); 
        }
      fator++; 
    }

  return 0;
}
=================================================================