Pagini recente » Cod sursa (job #2663301) | Cod sursa (job #637407) | Cod sursa (job #2711567) | Cod sursa (job #1147775) | Cod sursa (job #2609224)
#include <iostream>
#include <fstream>
std::ifstream fin ( "radixsort.in" );
std::ofstream fout ( "radixsort.out" );
const int NMAX = 1e7;
const int BASE = 1<<16;
long long v[1 + NMAX];
long long aux[1 + NMAX];
int poz[1 + BASE];
int nr[1 + BASE];
int main() {
int N, A, B, C;
fin >> N >> A >> B >> C;
v[0] = B;
for ( int i = 1; i < N; ++i )
v[i] = ( A * v[i - 1] + B ) % C;
int cif = 0;
int tmp = C;
while ( tmp ) {
++cif;
tmp /= BASE;
}
long long p = 1;
for ( int k = 0; k < cif; ++k ) {
for ( int j = 0; j < BASE; ++j )
nr[j] = 0;
for ( int i = 0; i < N; ++i ) {
int cf = v[i] / p % BASE;
++nr[cf];
}
poz[0] = 0;
for ( int j = 1; j < BASE; ++j )
poz[j] = poz[j - 1] + nr[j - 1];
for ( int i = 0; i < N; ++i ) {
int cf = v[i] / p % BASE;
aux[poz[cf]++] = v[i];
}
for ( int i = 0; i < N; ++i )
v[i] = aux[i];
p *= BASE;
}
for ( int i = 0; i < N; i = i + 10 )
fout << v[i] << ' ';
fin.close();
fout.close();
return 0;
}