Pagini recente » Cod sursa (job #628170) | Cod sursa (job #1645241) | Cod sursa (job #3245218) | Cod sursa (job #1752904) | Cod sursa (job #1842925)
#include <cstdio>
#include <cstring>
#define NMAX 10000003
#define grupa(a) ((a >> b) & 0xff)
using namespace std;
int vc = 1, vp = 0;
int v[2][NMAX];
int gr[0x100];
int ind[0x100];
int n, a, b, c;
int main()
{
int i;
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
scanf("%d%d%d%d", &n, &a, &b, &c);
v[0][0] = b;
for(i = 1; i < n; i++)
{
v[0][i] = (((((long long)v[0][i - 1]) * a) % c) + b) % c;
}
for(b = 0; b != 32; b += 8)
{
memset(gr, 0, sizeof(gr));
for(i = 0; i < n; i++)
gr[grupa(v[vp][i])]++;
ind[0] = 0;
for(i = 1; i < 0x100; i++)
ind[i] = ind[i - 1] + gr[i - 1];
for(i = 0; i < n; i++)
{
v[vc][ind[grupa(v[vp][i])]++] = v[vp][i];
}
vc = vp;
vp = (vp == 0) ? 1 : 0;
}
for(i = 0; i < n; i += 10)
{
printf("%d ", v[vp][i]);
}
return 0;
}