Pagini recente » Cod sursa (job #614937) | Cod sursa (job #1081128) | Cod sursa (job #1811644) | Cod sursa (job #1127736) | Cod sursa (job #2225004)
#include <bits/stdc++.h>
#define lim 10000005
using namespace std;
ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");
int n, a, b, c;
int v[lim];
int current_Order[lim];
int f[1<<16];
void readInput()
{
ios::sync_with_stdio(false);
fin.tie(0); fout.tie(0);
fin>>n>>a>>b>>c;
v[1] = b;
for ( int i = 2; i <= n; ++i )
v[i] = (a*v[i-1]+b)%c;
}
void radixSort()
{
const int mask = (1<<16)-1;
for ( int bits = 0; bits < 32; bits += 16 )
{
for ( int i = 0; i <= mask+5; ++i )
f[i] = 0;
for ( int i = 1; i <= n; ++i )
{
int current_Number = (v[i]>>bits)&mask;
f[current_Number]++;
}
for ( int i = 1; i <= mask; ++i )
f[i] += f[i-1];
for ( int i = n; i >= 1; --i )
{
int current_Number = (v[i]>>bits)&mask;
current_Order[f[current_Number]--] = v[i];
}
for ( int i = 1; i <= n; ++i )
v[i] = current_Order[i];
}
}
int main()
{
readInput();
radixSort();
for ( int i = 1; i <= n; i += 10 )
fout<<v[i]<<" ";
}