Pagini recente » Cod sursa (job #234020) | Cod sursa (job #2158885) | Cod sursa (job #2001466) | Cod sursa (job #168799) | Cod sursa (job #1417419)
#include <cstdio>
#include <algorithm>
#define M (1 << 23)
using namespace std;
int vv[10000010], q[10000010], nr[M];
int main ()
{
freopen ("radixsort.in", "r", stdin);
freopen ("radixsort.out", "w", stdout);
int n;
long long a, b, c;
scanf ("%d %lld %lld %lld", &n, &a, &b, &c);
vv[1] = b;
for (int i = 2; i <= n; ++i)
vv[i] = (1LL * vv[i - 1] * a + b) % c;
for (int h = 0; h < 32; h += 23)
{
for (int i = 0; i < M; ++i)
nr[i] = 0;
for (int i = 1; i <= n; ++i)
{
int x = (vv[i] >> h) & (M - 1);
++nr[x];
}
for (int i = 1; i < M; ++i)
nr[i] += nr[i - 1];
int k = 0;
for (int i = 1; i <= n; ++i)
{
int x = (vv[i] >> h) & (M - 1);
if (!x) q[++k] = vv[i];
else q[++nr[x - 1]] = vv[i];
}
for (int i = 1; i <= n; ++i)
vv[i] = q[i];
}
for (int i = 1; i <= n; i += 10)
printf ("%d ", vv[i]);
printf ("\n");
return 0;
}