Pagini recente » Cod sursa (job #706012) | Cod sursa (job #3196666) | Cod sursa (job #2410986) | Cod sursa (job #3263686) | Cod sursa (job #3266696)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
const int NMAX = 10000000;
const int MOD = 10;
int N, A, B, C;
int n;
unsigned long long v[NMAX+1];
unsigned long long sol[NMAX+1];
void countSort(int exp)
{
vector <unsigned long long> freq(MOD+1,0);
for(int i=1; i<=n; i++)
freq[(v[i]/exp)%MOD]++;
for(int i=1; i<10; i++)
freq[i]+=freq[i-1];
for(int i=n; i>=1; i--)
{
sol[freq[(v[i]/exp)%MOD]] = v[i];
freq[(v[i]/exp)%MOD]--;
}
for(int i=1; i<=n; i++)
v[i] = sol[i];
}
void radixSort()
{
unsigned long long maxi = 0;
for(int i=1; i<=n; i++)
maxi = max(maxi, v[i]);
for(int p=1; maxi/p>0; p*=MOD)
{
countSort(p);
}
}
signed main()
{
fin >> N >> A >> B >> C;
n = N;
v[1] = B;
for(int i=2; i<=N; i++)
v[i] = 1ull*(A * v[i-1] + B) % C;
radixSort();
for(int i=1; i<=n; i+=10)
fout << v[i] << ' ';
return 0;
}