Pagini recente » Cod sursa (job #2413249) | Cod sursa (job #296440) | Cod sursa (job #781105) | Cod sursa (job #2264736) | Cod sursa (job #1182269)
#include <cstdio>
#include <cstring>
#define MAX 10000001
#define DOI16 65536
using namespace std;
int v[MAX],w[MAX],aux[DOI16],shift;
unsigned mask;
void radix();
void countsort(int source[], int dest[]);
int main()
{
int n,a,b,c,i;
FILE*fin=fopen("radixsort.in","r");
FILE*fout=fopen("radixsort.out","w");
int i;
scanf("%d%d%d%d",&n,&a,&b,&c);
v[1]=b;
for(i=2;i<=n;++i)
v[i]=(1ll*a*v[i-1]+b)%c;
radix();
for(i=1;i<=n;i=i+10)
printf("%d ",v[i]);
fclose(fin);
fclose(fout);
return 0;
}
void countsort(int source[],int dest[])
{
int i;
for(i=1;i<=n;++i)
aux[(source[i]&mask)>>shift]++;
for(i=1;i<=DOI16;++i)
aux[i]=aux[i]+aux[i-1];
for(i=n;i>=1;--i)
dest[aux[(source[i]&mask)>>shift]--]=source[i];
}
void radix()
{
mask=0x0000ffff;
shift=0;
countsort(v,w);
memset(aux,0,sizeof(aux));
mask=0xffff0000;
shift=16;
countsort(w,v);
}