Pagini recente » Cod sursa (job #2416765) | Cod sursa (job #1096189)
#include <fstream>
#define NMAX 10000005
using namespace std;
FILE* f=freopen("radixsort.in","r",stdin);
FILE* o=freopen("radixsort.out","w",stdout);
int n,a,b,c;
int v[NMAX],t[NMAX];
int GetByte(int x, int b)
{
return (x>>(b*8))&((1<<8)-1);
}
void Csort(int a[], int b[], int byte)
{
int bucket[(1<<8)]={0};
for(int i=0;i<n;++i)
bucket[GetByte(a[i],byte)]+=1;
for(int i=1;i<(1<<8);++i)
bucket[i]+=bucket[i-1];
for(int i=n-1;i>=0;--i)
b[--bucket[GetByte(a[i],byte)]]=a[i];
}
void Radix()
{
for(int i=0;i<4;++i)
if(i%2==0)
Csort(v,t,i);
else
Csort(t,v,i);
}
int main()
{
scanf("%d%d%d%d",&n,&a,&b,&c);
v[0]=b%c;
for(int i=1;i<n;++i)
v[i]=long(v[i-1]*a)%c+b%c;
Radix();
for(int i=0;i<n;i+=10)
printf("%d ",v[i]);
return 0;
}