Pagini recente » Cod sursa (job #974097) | Cod sursa (job #1243398) | Cod sursa (job #1011724) | Cod sursa (job #1343894) | Cod sursa (job #1249170)
#include <stdio.h>
#define Nmax 10000005
#define Base 65535
int n, a, b, c;
int v[Nmax], u[Nmax], bucket[Base + 1];
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 (int i = 2; i <= n; ++i)
v[i] = (a * v[i - 1] + b) % c;
int power = 1;
for (int i = 1; Base >> i; ++i)
++power;
for (int i = 0; i < 32; i += power){
for (int j = 1; j <= n; ++j)
++bucket[(v[j] >> i) & Base];
for (int j = 1; j <= Base; ++j)
bucket[j] += bucket[j - 1];
for (int j = n; j > 0; --j)
u[bucket[(v[j] >> i) & Base]--] = v[j];
for (int j = 1; j <= n; ++j)
v[j] = u[j];
}
for (int i = 1; i <= n; i += 10)
printf("%d ", v[i]);
return 0;
}