Pagini recente » Cod sursa (job #1097184) | Cod sursa (job #1402376) | Cod sursa (job #1054047) | Cod sursa (job #676897) | Cod sursa (job #1691724)
#include <fstream>
#define nmax 20001
using namespace std;
ifstream fin("perm2.in");
ofstream fout("perm2.out");
int vact[nmax],vprv[nmax],vst[nmax];
int n,i,k=1,r,p,z,h,h2=1;
bool b=1,vpoz[nmax]={false};
int cmmdc(int a, int b)
{
if((!a) || (!b)) return a+b;
if(a>b) return cmmdc(a%b,b);
return cmmdc(a,b%a);
}
int main()
{
fin>>n;
h=n;
for(i=1;i<=n;i++){fin>>vst[i];vprv[i]=vst[i];if(vst[i]==i){vpoz[i]=true;if(z==0)vact[++z]=1;}}
while(b)
{k++;b=0;
for(i=h2;i<=h;i++)
{if(!vpoz[i])
{vprv[i]=vst[vprv[i]];
if(vprv[i]==i){vpoz[i]=true;
if(vact[z]!=k)vact[++z]=k;
}}}
for(i=1;i<=n;i++)if(!vpoz[i]){b=1;break;}
for(i=h2;i<=n,vpoz[i];i++)h2++;
for(i=h;i>=1,vpoz[i];i--)h--;
}
if(z==1)fout<<vact[1];
else{
p=(vact[1]*vact[2])/cmmdc(vact[1],vact[2]);
for(i=3;i<=z;i++)
p=(p*vact[i])/cmmdc(p,vact[i]);
fout<<p;}
return 0;
}