Pagini recente » Cod sursa (job #2691091) | Cod sursa (job #1323348) | Cod sursa (job #2265917) | Cod sursa (job #1035445) | Cod sursa (job #2500980)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("curcubeu.in");
ofstream g ("curcubeu.out");
long long a[1000100], b[1000100], c[1000100],v[1000100],t[1000100], n;
int calc(int x)
{
int y=x, z=x;
while(t[y]) y=t[y];
while(0!=t[x])
{
z=x;
x=t[x];
t[z]=y;
}
return y;
}
void join(int x, int y)
{
x=calc(x);
y=calc(y);
if(x>y)t[x]=y;
else t[y]=x;
}
int main()
{
f>>n>>a[1]>>b[1]>>c[1];
if(a[1]>b[1]) swap(a[1], b[1]);
for(int i=2;i<n;++i)
{
a[i]=(a[i-1]%n*i%n)%n;
b[i]=(b[i-1]%n*i%n)%n;
c[i]=(c[i-1]%n*i%n)%n;
if(a[i]>b[i])
swap(a[i], b[i]);
}
long long aux,j;
for(int i=n-1;i>0;--i)
{
j=calc(a[i]);
while(j<=b[i])
{
if(v[j]==0)
v[j]=c[i], join(j, b[i]);
j=calc(++j);
}
}
for(int i=1;i<n;++i)
g<<v[i]<<"\n";
return 0;
}