Pagini recente » Cod sursa (job #3279632) | Cod sursa (job #2770457) | Cod sursa (job #2535811) | Cod sursa (job #1010854) | Cod sursa (job #1405553)
#include <cstdio>
FILE* in=fopen("radixsort.in","r");
FILE* out=fopen("radixsort.out","w");
int n,a,b,c;
const int Q=10000007;
int v[Q];
int srt[Q];
int p[16][Q];
int main()
{
fscanf(in,"%d%d%d%d",&n,&a,&b,&c);
v[1]=b;
srt[1]=1;
for(int i=2; i<=n; i++)
{
v[i]=(a*v[i-1]+b)%c;
srt[i]=i;
}
int go;
for(int k=0; k<32; k+=4)
{
for(int i=0; i<16; i++)
p[i][0]=0;
for(int i=1; i<=n; i++)
{
go=((v[srt[i]])>>k)&15;
p[go][++p[go][0]]=srt[i];
}
srt[0]=0;
for(int f=0; f<16; f++)
{
for(int i=1; i<=p[f][0]; i++)
{
srt[++srt[0]]=p[f][i];
}
}
}
for(int i=1; i<=n; i+=10)
{
fprintf(out,"%d ",v[srt[i]]);
}
return 0;
}