Pagini recente » Cod sursa (job #2368432) | Cod sursa (job #1271303) | Cod sursa (job #1305850) | Cod sursa (job #562267) | Cod sursa (job #1164949)
#include <cstdio>
#include <vector>
#define MASK 255
using namespace std;
int v[10000005];
int N,A,B,C;
void read()
{
scanf("%d%d%d%d",&N,&A,&B,&C);
v[1] = B;
for(int i = 2; i <= N; ++i)
v[i] = ( (long long)(A*v[i-1]) + B ) % C;
}
void sparge(int k)
{
int pz = 0;
vector<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<int>::iterator it = bucket[i].begin();it != bucket[i].end(); ++it)
v[++pz] = *it;
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
read();
for(int i = 0; i <= 3; ++i)
sparge(i*8);
for(int i = 1; i <= N; i += 10)
printf("%d ",v[i]);
return 0;
}