Pagini recente » Cod sursa (job #352778) | Cod sursa (job #1957594) | Cod sursa (job #1133188) | Cod sursa (job #1635805) | Cod sursa (job #1378749)
#include <cstdio>
#define nmax 10000010
#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();
int main(){
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
read();
radixsort();
print();
return 0;
}
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)countersort(temp,numbers,i);
else countersort(numbers,temp,i);
}
}
void print(){
for(int i = 0;i < n;i += 10)printf("%d ",numbers[i]);
printf("\n");
}