Pagini recente » Cod sursa (job #920681) | Cod sursa (job #60523) | Cod sursa (job #1872901) | Cod sursa (job #310997) | Cod sursa (job #1378775)
#include <cstdio>
#define nmax 10000001
#define get_byte(x) ((x>>(byte * 8))&0xFF) ///0xff = 255
#include <cstring>
using namespace std;
int numbers[nmax];
int n,a,b,c;
//void read();
//void countersort(int*&,int*&,int);
//void radixsort();
//void print();
void read(){
scanf("%d %d %d %d ",&n,&a,&b,&c);
numbers[0] = b % c;
for(int i = 1;i < n;i++)
numbers[i] = (1LL * a * numbers[i-1] % c + b) % c;
}
void countersort(int A[],int B[],int byte){
int counter[1<<8];
int index[1<<8];
memset(counter,0,sizeof(counter));
for(int i = 0;i < n;i++)++counter[get_byte(A[i])];
index[0] = 0;
for(int i = 1;i < 1<<8;i++)index[i] = index[i-1] + counter[i-1];
for(int i = 0;i < n;i++)B[index[get_byte(A[i])]++] = A[i];
}
void radixsort(){
int *temp = new int[n];
for(int i = 0;i < sizeof(numbers[0]);i++){
if(i%2 == 0)countersort(numbers,temp,i);
else countersort(temp,numbers,i);
}
}
void print(){
for(int i = 0;i < n;i += 10)printf("%d ",numbers[i]);
printf("\n");
}
int main(){
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
read();
radixsort();
print();
return 0;
}