No se pueden imprimir correctamente los números sociables

Tengo un código que encuentra la sum de los divisores de un número, pero no puedo hacer que se aplique a mi n creciente e imprimir todos los números respectivamente.
El codigo es

long div(int n) { long sum = 0; int square_root = sqrt(n); for (int i = 1; i <= square_root; i++) { if (n % i == 0) { sum += i; if (i * i != n) { sum += n / i; } } } return sum - n; } 

En mi principal () necesito tener un número de CA que comience desde 1 y vaya a mi MAXCYC, que es 28. El n va de 2 a MAXNUM que es 10000000. El progtwig debe encontrar todos los números perfectos, amistosos y sociables e imprimirlos con sus respectivas parejas.
Salida de muestra:
Ciclo de longitud 2: 12285 14595 12285
Ciclo de longitud 5: 12496 14288 15472 14536 14264 12496

 for (int n = 2; n <= MAXNUM; n++) { long sum = div(n); long res = div(sum); if (res <= MAXNUM) { // Checking if the number is just sociable int c = 0; while (c <= MAXCYC && n != res) { res = div(sum); c++; } if (c <= MAXCYC) { printf("Cycle of length %d: ", c); printf("%ld ", sum); do { printf("%ld ", res); res = div(res); } while (sum < res); printf("%ld ", sum); c += c - 2; printf("\n"); } } } 

Solo obtengo pares de ciclos de 1, 2 y nada más que eso. Además, ni siquiera lo imprime correctamente, ya que dice Ciclo de longitud 0: en todos los resultados sin boost. Creo que el problema está en la f antes de la primera impresión, pero no puedo hacer que funcione de manera tal que mi
(n == sum) imprime Ciclo de longitud 1: xx pares
(n == res && sum <res) imprime Ciclo de longitud 2: pares xyx
(res <= MAXNUM) imprime Ciclo de longitud c: xyz … x (c cantidad de pares incluyendo la primera x)

¿Qué piensan ustedes que debería cambiar?

Ok, este código debería funcionar si entendí bien su requerimiento.

 #include  #include  int div_sum(int n) { long sum = 0; int square_root = sqrt(n); for (int i = 1; i <= square_root; i++) { if (n % i == 0) { sum += i; if (i * i != n) { sum += n / i; } } } return sum - n; } int MAX_N = 10000000; int MAX_CYCLES = 28; int main() { int cycles; for(int n = 2; n < MAX_N; n++){ int found = 0; for(int c = 1; !found && c <= MAX_CYCLES; c++){ cycles = c; int aliquote = n; while(cycles--) aliquote = div_sum(aliquote); //it is a cycle of length c cycles = c; if(n == aliquote){ printf("Cycle of length %d: %d", c, n); while(cycles--){ aliquote = div_sum(aliquote); printf(" %d", aliquote); } printf("\n"); found = 1; } } } return 0; }