#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int radixsort(int *s, int n, int p, int b);
int main()
{
int n,a,b,c,*s;
int bt,i;
FILE *f;
f = fopen("radixsort.in", "r");
fscanf(f,"%d",&n);
fscanf(f,"%d",&a);
fscanf(f,"%d",&b);
fscanf(f,"%d",&c);
fclose(f);
s = (int*)calloc(n,sizeof(int));
s[0] = b;
for(i=1;i<n;i++)
{
s[i]= (a*s[i-1] + b)%c;
}
s[n] = 0;
radixsort(s,n-1,0,31);
f = fopen("radixsort.out", "w");
for(i=0; i<n; i+=10)
fprintf(f, "%d ", s[i]);
fclose(f);
// for(i=0; i<n; i++)
// printf("%d ", s[i]);
free(s);
return 0;
}
int radixsort(int *s, int n, int p, int b)
{
int i,t,c,v,j;
t = n;
if((p == n) || (b < 0)) return 0;
i=p;
while(i<t)
{
if (((s[i]>> b)&1) == 1) { c = s[t]; s[t]=s[i]; s[i]=c; t--;}
else i++;
}
if (((s[i]>> b)&1) == 1) i--; else t++;
// printf("Sortare a elementelor pe baza bit %d, intre %d %d %d %d\n", b,p,n,t,i);
// for(j=p; j<n; j++)
// printf("%d ", s[j]);
// printf("\n\n\n\n\n");
// getch();
radixsort(s, i, p, b-1);
radixsort(s, n, t, b-1);
return 0;
}