Pagini recente » Cod sursa (job #1691390) | Cod sursa (job #624891) | Cod sursa (job #1478432) | Cod sursa (job #2929020) | Cod sursa (job #1454020)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#define INF (1<<30)
#define mod 666013
using namespace std;
int n, a, b, c, i;
int f[1000005];
vector <int> v[100005];
void cntSort()
{
//int f[1000005] = {0};
int i = 0, j = 0;
int x = b;
f[b]++;
for(i = 2; i <= n; i++)
{
x = ( 1LL * a * x + (long long)b ) % c;
f[x]++;
}
for(i = 0; i < c; i++)
while( f[i]-- )
{
j++;
if((j - 1) % 10 == 0)
printf("%d ", i);
}
}
void bckSort()
{
//vector <int> v[100005];
int elMax = c;
int bkSize = c / 100000 + 1;
int o = 0;
int x = b;
v[x / bkSize].push_back(x);
int i = 0;
for(i = 2; i <= n; i++)
{
x = ( 1LL * a * x + (long long)b ) % c;
v[x / bkSize].push_back(x);
}
for(i = 0; i <= 100000; i++)
if(v[i].size())
{
sort(v[i].begin(), v[i].end());
int j = 0;
int sz = v[i].size();
for(j = 0; j < sz; j++)
{
o++;
if(o % 10 == 1)
printf("%d ", v[i][j]);
}
}
}
int main()
{
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
scanf("%d%d%d%d", &n, &a, &b, &c);
/*f[1] = b;
for(i = 2; i <= n; i++)
f[i] = (a * f[i - 1] + b) % c;
for(i = 1; i <= n; i += 10)
printf("%d ", f[i]);
return 0;*/
if(c <= 1000000)
cntSort();
else
bckSort();
return 0;
}