Lo puedes resolver con ciclos anidados. La idea es la siguiente
Sea N el número que se quiere averiguar si es medio.
Sea S1 = Sumatorio desde 1 hasta N-1
Sea S2 = Sumatorio desde N+1 hasta m, con m siendo el término que hace que S2 >= S1.
Si S2 = S1, N es medio. Si S2 > S1, N no es medio.
Un poco de código chapuza:
Código
#include <stdio.h> int main (void) { int N = 6, i; int sumaAntecesores = 0; // S1 int sumaPredecesores = 0; // S2 for (i=1; i<N; i++) sumaAntecesores += i; while (sumaPredecesores < sumaAntecesores) sumaPredecesores += ++N; return 0; }
Ahí hago el proceso iterativo para verificar si un número N es medio o no.
En tu caso N varía entre 1 y una MACRO de tamaño máximo, por ejemplo, el tamaño aceptado por la máquina. O usar un while (true) {}, teniendo una variable que recorra los Z+ y de la cual averiguaremos si es medio o no en cada iteración.
Para mejorar el proceso podrías llevar sumas parciales en el proceso...
Aunque el algoritmo de leosansan es mucho más eficiente.