Pagini recente » Cod sursa (job #680235) | Cod sursa (job #145484) | Cod sursa (job #2128285) | Cod sursa (job #1025458) | Cod sursa (job #2450282)
#include <iostream>
#include <cstdio>
using namespace std;
const int N=10000000+7;
const int RAD=(1<<16);
int n;
int a,b,c;
int v[N];
int aux[N];
int f[RAD];
void clr_f()
{
for(int i=0;i<RAD;i++)
f[i]=0;
}
void add_up()
{
for(int i=1;i<RAD;i++)
f[i]+=f[i-1];
}
void cop()
{
for(int i=1;i<=n;i++)
v[i]=aux[i];
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
cin>>n>>a>>b>>c;
v[1]=b;
for(int i=2;i<=n;i++)
v[i]=(a*(long long)v[i-1]+b)%c;
clr_f();
for(int i=1;i<=n;i++)
f[v[i]%RAD]++;
add_up();
for(int i=n;i>=1;i--)
aux[f[v[i]%RAD]--]=v[i];
cop();
clr_f();
for(int i=1;i<=n;i++)
f[v[i]/RAD]++;
add_up();
for(int i=n;i>=1;i--)
aux[f[v[i]/RAD]--]=v[i];
cop();
for(int i=1;i<=n;i+=10)
printf("%d ",v[i]);
printf("\n");
return 0;
}