Pagini recente » Cod sursa (job #1293328) | Rating Alex Turdean (alexmisto423) | Statistici Semenenco Stanislav (Shapka-Nevedimka) | Rating Simion George-Vlad (simiongeorge) | Cod sursa (job #1462224)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define B 8
#define mask (1 << 8) - 1
#define Nmax 10000002
using namespace std;
int n, a, b, c, i, j, v[Nmax];
int w[Nmax], Next[Nmax], V[Nmax];
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 (i = 2; i <= n; ++ i)
v[i] = (1LL * a * v[i - 1] + b) % c;
for (i = 0; i < 4; ++ i)
{
memset(w, 0, sizeof(w));
memset(Next, 0, sizeof(Next));
for (j = 1; j <= n; ++ j)
++ w[(v[j] & mask) >> (B * i)],
V[j] = v[j];
for (j = 1; j <= mask; ++ j)
w[j] += w[j - 1];
for (j = 1; j <= n; ++ j)
{
c = (V[j] & mask) >> (B * i);
++ Next[c];
if (c)
v[Next[c] + w[c - 1]] = V[j];
else v[Next[c]] = V[j];
}
}
for (i = 1; i <= n; i += 10)
printf("%d ", v[i]);
return 0;
}