Pagini recente » Cod sursa (job #3037609) | Cod sursa (job #820360) | Cod sursa (job #677379) | Cod sursa (job #1907758) | Cod sursa (job #1338223)
#include <cstdio>
#include <queue>
#define M (1 << 16)
using namespace std;
int vv[10000010];
queue <int> q[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 += 16)
{
for (int i = 1; i <= n; ++i)
q[(vv[i] >> h) & (M - 1)].push (vv[i]);
int k = 0;
for (int i = 0; i < M; ++i)
while (!q[i].empty ())
{
vv[++k] = q[i].front ();
q[i].pop ();
}
}
for (int i = 1; i <= n; i += 10)
printf ("%d ", vv[i]);
printf ("\n");
return 0;
}