比赛 |
20101117 |
评测结果 |
AAATAAAAAA |
题目名称 |
教官 |
最终得分 |
90 |
用户昵称 |
Pom |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2010-11-17 08:49:30 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
int n,i,j,k,sum[10001],tot=0,num[10001],a[10001],ci,MAX;
bool b[10001];
long long ans=1;
void init()
{
freopen("officer.in","r",stdin);
freopen("officer.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",a+i);
}
}
void solve()
{
memset(b,false,sizeof(b));
for (i=2;i<=10000;i++)
if (!b[i])
{
j=i;
sum[++tot]=i;
num[tot]=1;
while (j<=10000)
{
b[j]=true;
j+=i;
}
}
for (i=1;i<=n;i++)
{
j=i;
ci=0;
do
{
j=a[j];
ci++;
}
while (j!=i);
for (j=1;j<=tot;j++)
{
MAX=1;
while (ci%sum[j]==0)
{
ci=ci/sum[j];
MAX*=sum[j];
}
num[j]=max(num[j],MAX);
}
}
for (i=1;i<=tot;i++)
ans*=num[i];
cout<<ans<<endl;
}
int main()
{
init();
solve();
return 0;
}