Pagini recente » Cod sursa (job #890568) | Cod sursa (job #1188033) | Cod sursa (job #811219) | Cod sursa (job #2178668) | Cod sursa (job #1167821)
#include<cstdio>
#include<cstring>
using namespace std;
const int NMAX = 10000000+5;
const int DIGITS = 4;
const int BUCKET = (1<<8)-1;
void Read(),Solve(),Print();
int N,A,B,C;
int V[NMAX];
int T[NMAX];
int Buckets[BUCKET+5];
int main()
{
Read();
Solve();
Print();
return 0;
}
void Read()
{
int i;
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d%d%d%d",&N,&A,&B,&C);
for(i = 1; i <= N; i++)
V[i] = (1LL * A * V[i-1] + B)%C;
}
void Solve()
{
int i,k,step;
for(step = 0; step < DIGITS; step++)
{
for(i = 1; i <= N; i++)
{
k = (V[i]>>(8*step)) & BUCKET;
Buckets[k]++;
}
for(i = 1; i <= BUCKET; i++)
Buckets[i] += Buckets[i-1];
for(i = N; i >= 1; i--)
{
k = (V[i]>>(8*step)) & BUCKET;
T[Buckets[k]] = V[i];
Buckets[k]--;
}
memcpy(V,T,sizeof(T));
}
}
void Print()
{
int i;
for(i = 1; i <= N; i += 10)
printf("%d ",V[i]);
}