Pagini recente » Cod sursa (job #1835384) | Cod sursa (job #2591166) | Cod sursa (job #2592083) | Cod sursa (job #2843212) | Cod sursa (job #1788165)
#include <cstdio>
const int maxN = 1000005;
int A[maxN + 5], B[maxN + 5], C[maxN + 5];
int ans[maxN + 5], v[maxN + 5];
void quickswap(int &x, int &y) {
int aux = x;
x = y;
y = aux;
}
int main() {
//freopen("curcubeu.in", "r", stdin);
//freopen("curcubeu.out", "w", stdout);
int N;
scanf("%d %d %d %d", &N, &A[1], &B[1], &C[1]);
if(A[1] > B[1])
quickswap(A[1], B[1]);
for(int i = 2; i < N; ++ i) {
A[i] = static_cast<int>(static_cast<long long>(A[i - 1] * i) % N);
B[i] = static_cast<int>(static_cast<long long>(B[i - 1] * i) % N);
C[i] = static_cast<int>(static_cast<long long>(C[i - 1] * i) % N);
if(A[i] > B[i])
quickswap(A[i], B[i]);
}
for(int i = N - 1; i; -- i) {
int j = A[i];
while(j <= B[i]) {
if(!ans[j]) {
ans[j] = C[i];
v[j] = B[i] + 1;
++ j;
} else
j = v[j];
}
}
for(int i = 1; i < N; ++ i)
printf("%d\n", ans[i]);
return 0;
}