Pagini recente » Cod sursa (job #2721600) | Cod sursa (job #2778582) | Cod sursa (job #2690392) | Cod sursa (job #811882) | Cod sursa (job #1110435)
#include <cstdio>
#include <cstring>
#define NMAX 10000005
#define ll long long
#define LMAX 10
using namespace std;
int n, a, b, c, A[NMAX], B[NMAX], pos[LMAX];
int main()
{
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
scanf("%d%d%d%d", &n, &a, &b, &c);
A[1] = b;
for (int i = 2; i <= n; i++)
A[i] = ((ll)A[i - 1] * a + b) % c;
for (int i = 1, curr = 1; i <= LMAX; i++, curr *= 10)
{
memset(pos, 0, sizeof(pos));
for (int j = 1; j <= n; j++)
pos[(A[j] / curr) % 10]++;
for (int j = 1; j < LMAX; j++)
pos[j] += pos[j - 1];
for (int j = LMAX - 1; j >= 1; j--)
pos[j] = pos[j - 1];
pos[0] = 0;
for (int j = 1; j <= n; j++)
B[++pos[(A[j] / curr) % 10]] = A[j];
memcpy(A, B, sizeof(B));
}
for (int i = 1; i <= n; i += 10)
printf("%d ", A[i]);
printf("\n");
return 0;
}