Si X es menor que M, al se una división entera el resultado siempre será cero. Puedes declarar a U como float y cambiar los especificadores de tipo donde corresponda por %f, luego hacer un type casting en la división para que haga la división real y no la entera:
Código:
...
for(i=1; i<n; ++i)
{
X=(a * X + c)%M;
U=float(X)/M;
printf("Numero %i %f\n",i,U);
fprintf(pf,"%f\n",U);
}
...
Así podrás ver si el resultado es menor que uno.
Saludos