Pagini recente » Cod sursa (job #137519) | Cod sursa (job #2918984) | Cod sursa (job #614841) | Cod sursa (job #987055) | Cod sursa (job #1145932)
#include <cstdio>
#include <vector>
#define mask 255
using namespace std;
unsigned int v[10000005],N;
int A,B,C;
void sparge(int k)
{
int pz = 0;
vector<unsigned int> bucket[mask+2];
for(int i = 1; i <= N; ++i)
bucket[(v[i]<<k)&mask].push_back(v[i]);
for(int i = 0; i <= mask; ++i)
for(vector<unsigned int>::iterator it = bucket[i].begin(); it != bucket[i].end(); ++it)
v[++pz] = *it;
}
void solve()
{
for(int i = 0; i <= 3; ++i)
sparge(i*8);
}
void print()
{
for(int i = 1; i <= N; i += 10)
printf("%d ",v[i]);
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d%d%d%d",&N,&A,&B,&C);
v[1] = B;
for(int i = 2; i <= N; ++i)
v[i] = (((A % C) * (v[i-1]%C)) + B) % C;
solve();
print();
return 0;
}