Pagini recente » Cod sursa (job #1314206) | Cod sursa (job #1718912) | Cod sursa (job #843444) | Cod sursa (job #2880200) | Cod sursa (job #1723328)
#include <cstdio>
#include <cstring>
#define MAXN 100000000
#define MAXBYTE 8
int v[MAXN+1],vf[1<<MAXBYTE],val[MAXN+1];
inline int get_bytes(int x,int k){
return (x>>k)&((1<<MAXBYTE)-1);
}
int main(){
FILE*fi,*fout;
int i,n,j;
long long a,b,c;
fi=fopen("radixsort.in" ,"r");
fout=fopen("radixsort.out" ,"w");
fscanf(fi,"%d%lld%lld%lld" ,&n,&a,&b,&c);
v[1]=b;
for(i=2;i<=n;i++)
v[i]=(a*v[i-1]+b)%c;
for(i=0;i<4;i++){
memset(vf,0,sizeof(vf));
for(j=1;j<=n;j++)
vf[get_bytes(v[j],MAXBYTE*i)]++;
for(j=1;j<(1<<MAXBYTE);j++)
vf[j]+=vf[j-1];
for(j=n;j>0;j--){
val[vf[get_bytes(v[j],MAXBYTE*i)]]=v[j];
vf[get_bytes(v[j],MAXBYTE*i)]--;
}
for(j=1;j<=n;j++)
v[j]=val[j];
}
for(i=1;i<=n;i+=10)
fprintf(fout,"%d " ,v[i]);
fclose(fi);
fclose(fout);
return 0;
}