Pagini recente » Cod sursa (job #1309205) | Cod sursa (job #1038886) | Cod sursa (job #1408412) | Cod sursa (job #3122006) | Cod sursa (job #1226241)
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
using namespace std;
int N, A, B, C;
queue<int> Bucket[2][1000];
vector<int> Sol;
void RadixSort() {
int S = 1, D = 0;
long long X = 0;
for (int i = 1; i <= N; i++) {
X = (X * A + B) % C;
Bucket[0][X % 1000].push(X);
}
int Y = 1;
do {
Y *= 1000;
S ^= 1;
D ^= 1;
for (int j = 0; j < 1000; j++) {
while (!Bucket[S][j].empty()) {
A = Bucket[S][j].front();
Bucket[S][j].pop();
B = A / Y;
if (B > 0) {
Bucket[D][B % 1000].push(A);
} else {
Sol.push_back(A);
}
}
}
} while (Y < 1000000000LL);
}
int main(){
int x;
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d %d %d %d", &N, &A, &B, &C);
RadixSort();
for (int i = 0; i < N; i++) {
if (i % 10 == 0) {
printf("%d ", Sol[i]);
}
}
return 0;
}