Pagini recente » Cod sursa (job #70400) | Cod sursa (job #944298) | Cod sursa (job #3133125) | Cod sursa (job #1865120) | Cod sursa (job #1313484)
#include <iostream>
#include<cstdio>
#include <cstdlib>
using namespace std;
unsigned int rest1,rest2,rest3,rest4;
unsigned int v[10000001],dimv,a,b,c,cifre,dim,n;
struct nod *start[256],*stop[256];
struct nod
{ unsigned int val;
struct nod *u;
};
void adauga(unsigned int nr, unsigned int poz)
{
struct nod *p=(struct nod*)malloc(dim);
stop[poz]->val=nr;
stop[poz]->u=p;
stop[poz]=p;
}
void descarca()
{dimv=0;
struct nod* p;
for(int i=0; i<=255; i++)
while(start[i]!=stop[i])
{
struct nod* p;
++dimv;
v[dimv]=start[i]->val;
p=start[i]->u;
free(start[i]);
start[i]=p;
}
}
int main()
{
rest1=255;
rest2=rest1<<8;
rest3=rest2<<8;
rest4=rest3<<8;
dim=sizeof(struct nod);
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
//initializam listele
for(int i=0; i<=255; i++)
{
start[i]=(struct nod*)malloc(dim);
stop[i]=start[i];
}
cin>>n>>a>>b>>c;
unsigned int anterior,curent;
anterior=b;
adauga(anterior,(anterior&rest1) );
for(int i=2; i<=n; i++)
{
curent=(a*anterior+b)%c;
adauga(curent,(curent&rest1) );
anterior=curent;
}
descarca();
for(int i=1; i<=n; i++)
adauga(v[i],(v[i]&rest2));
descarca();
for(int i=1; i<=n; i++)
adauga(v[i],(v[i]&rest3));
descarca();
for(int i=1; i<=n; i++)
adauga(v[i],(v[i]&rest4));
descarca();
for(int i=1; i<=n; i++)if(i%10 == 1)cout<<v[i]<<" ";
return 0;
}