#include<bits/stdc++.h>
using namespace std;
const int MAXN=210;
long long gcd(long long a,long long b)
{
return a%b?gcd(b,a%b):b;
}
long long lcm(long long a,long long b)
{
return a/gcd(a,b)*b;
}
long long f[MAXN],m[MAXN];
int main()
{
long long n,i,j,ans,tmp,mink,nxt;
while(scanf("%lld",&n)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%lld",&f[i]);
ans=1;
mink=1;
for(i=1;i<=n;i++)
{
memset(m,0,sizeof(m));
j=i;
m[f[j]]=1;
while(1)
{
nxt=f[j];
if(m[f[nxt]])
{
tmp=m[f[j]]+1-m[f[nxt]];
mink=max(mink,m[f[nxt]]);
break;
}
m[f[nxt]]=m[f[j]]+1;
j=nxt;
}
ans=lcm(ans,tmp);
}
tmp=ans;
while(ans<mink)
ans+=tmp;
printf("%lld\n",ans);
}
}
51nod 1473 等幂映射
最新推荐文章于 2018-10-16 14:28:07 发布