Pagini recente » Cod sursa (job #2846994) | Cod sursa (job #2521904) | Cod sursa (job #1218000) | Cod sursa (job #655716) | Cod sursa (job #2167865)
#include <iostream>
#include <cstdio>
using namespace std;
#define NMAX 10000001
long long num[NMAX], bucket[10][NMAX];
int main()
{
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out" , "w", stdout);
int n, a, b, c;
scanf("%d%d%d%d", &n, &a, &b, &c);
num[1] = (long long)b;
long long maxim = (long long)b;
for(int i = 2; i <= n; ++i){
num[i] = (a * num[i - 1] + b) % c;
if(num[i] > maxim) maxim = num[i];
}
long long zece = 1LL;
while(zece <= maxim){
if(zece > maxim)
break;
int len0 = 0, len1 = 0, len2 = 0, len3 = 0, len4 = 0, len5 = 0, len6 = 0, len7 = 0, len8 = 0, len9 = 0, maxlen = 0;
for(int i = 1; i <= n; ++i){
int cif = (num[i] / zece) % 10;
if(cif == 0) bucket[cif][++len0] = num[i];
if(cif == 1) bucket[cif][++len1] = num[i];
if(cif == 2) bucket[cif][++len2] = num[i];
if(cif == 3) bucket[cif][++len3] = num[i];
if(cif == 4) bucket[cif][++len4] = num[i];
if(cif == 5) bucket[cif][++len5] = num[i];
if(cif == 6) bucket[cif][++len6] = num[i];
if(cif == 7) bucket[cif][++len7] = num[i];
if(cif == 8) bucket[cif][++len8] = num[i];
if(cif == 9) bucket[cif][++len9] = num[i];
}
int index = 0;
for(int i = 1; i <= len0; ++i) num[++index] = bucket[0][i];
for(int i = 1; i <= len1; ++i) num[++index] = bucket[1][i];
for(int i = 1; i <= len2; ++i) num[++index] = bucket[2][i];
for(int i = 1; i <= len3; ++i) num[++index] = bucket[3][i];
for(int i = 1; i <= len4; ++i) num[++index] = bucket[4][i];
for(int i = 1; i <= len5; ++i) num[++index] = bucket[5][i];
for(int i = 1; i <= len6; ++i) num[++index] = bucket[6][i];
for(int i = 1; i <= len7; ++i) num[++index] = bucket[7][i];
for(int i = 1; i <= len8; ++i) num[++index] = bucket[8][i];
for(int i = 1; i <= len9; ++i) num[++index] = bucket[9][i];
zece *= 10LL;
}
for(int i = 1; i <= n; i += 10)
printf("%lld ", num[i]);
return 0;
}