Pagini recente » Cod sursa (job #2060745) | Cod sursa (job #1301746) | Cod sursa (job #1184083) | Cod sursa (job #661873) | Cod sursa (job #1702244)
#include <iostream>
#include <fstream>
#include <list>
using namespace std;
ifstream si("radixsort.in");
ofstream so("radixsort.out");
const int NMAX=10000005;
int v[260];
int pst[260];
long long x[NMAX];
long long rez[NMAX];
inline int grupa(int i,int octdeja)
{
return (x[i]>>(1<<(8*octdeja)))&255;
}
void radixsort(int octdeja,int n)
{
int i;
for(i=0;i<n;++i)
{
v[grupa(i,octdeja)]++;
}
int st=0;
for(i=0;i<256;++i)
{
pst[i]=st;
st+=v[i];
v[i]=0;
}
for(i=0;i<n;++i)
{
rez[pst[grupa(i,octdeja)]]=x[i];
++pst[grupa(i,octdeja)];
}
for(i=0;i<n;++i)
{
x[i]=rez[i];
}
}
int main()
{
int n,k,m,p;
si>>n>>k>>m>>p;
k%=p;
m%=p;
x[0]=m;
int i;
for(i=1;i<=n;++i)
{
x[i]=((x[i-1]*k)%p+m)%p;
}
for(i=0;i<8;++i)
{
radixsort(i,n);
}
for(i=0;i<n;i+=10)
so<<x[i]<<' ';
return 0;
}