Pagini recente » Monitorul de evaluare | Cod sursa (job #2540948) | Cod sursa (job #1274969) | Cod sursa (job #2108448) | Cod sursa (job #235732)
Cod sursa(job #235732)
#include <stdio.h>
#define NMAX 1000002
int A[NMAX], B[NMAX], C[NMAX], ANS[NMAX], F[NMAX];
inline void swap(const int pos)
{
A[pos]^=B[pos];
B[pos]^=A[pos];
A[pos]^=B[pos];
}
int main()
{
freopen("curcubeu.in","rt",stdin);
freopen("curcubeu.out","wt",stdout);
int N;
scanf("%d%d%d%d",&N,&A[1],&B[1],&C[1]);
int i;
for(i=2;i<N;++i)
{
A[i]=((long long)A[i-1]*i)%N;
B[i]=((long long)B[i-1]*i)%N;
C[i]=((long long)C[i-1]*i)%N;
}
for(i=1;i<N;++i)
{
F[i]=i+1;
if(A[i]>B[i])swap(i);
}
int b,e,a;
for(i=N-1;i;--i)
{
b=A[i];e=B[i];
while(b<=e)
{
if(!ANS[b])ANS[b]=C[i];
a=F[b];F[b]=e+1;b=a;
}
}
for(i=1;i<N;++i)
printf("%d\n",ANS[i]);
return 0;
}