Pagini recente » Cod sursa (job #674267) | Cod sursa (job #2607732) | Cod sursa (job #1987758) | Cod sursa (job #1322450) | Cod sursa (job #1493126)
#include <cstdio>
#include <algorithm>
using namespace std;
long long v[10000010], vv[10000010];
int prim[16], ultim[16], nxt[10000010];
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);
v[1] = b;
for (int i = 2; i <= n; ++i)
v[i] = (1LL * v[i - 1] * a + b) % c;
int p = 1;
for (; p <= 1000000000; p *= 10)
{
for (int i = 1; i <= n; ++i)
{
int x = (1LL * v[i] / p) % 10;
if (!prim[x]) prim[x] = i;
else nxt[ultim[x]] = i;
ultim[x] = i;
}
int k = 0;
for (int i = 0; i < 10; ++i)
{
for (int j = prim[i]; j < ultim[i]; j = nxt[j])
vv[++k] = v[j];
if (ultim[i]) vv[++k] = v[ultim[i]];
prim[i] = ultim[i] = 0;
}
for (int i = 1; i <= n; ++i)
v[i] = vv[i];
}
for (int i = 1; i <= n; i += 10)
printf ("%lld ", v[i]);
printf ("\n");
return 0;
}