题目链接:https://ac.nowcoder.com/acm/contest/5670/E
要用到高精度,偷懒用python,但因为求 \(lcm\) 时没有用 \("//"\)(整数除法),一直不知道哪错了。
代码:
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
def lcm(a, b):
return a * b // gcd(a, b)
maxn = int(1e5 + 5)
vis = [0] * maxn
n = int(input())
p = input()
p = "0 " + p
p = [int(i) for i in p.split()]
ans = int(1)
for i in range(1, n + 1):
if vis[i]:
continue
cnt = 0
a = i
while vis[a] == 0:
cnt = cnt + 1
vis[a] = 1
a = p[a]
ans = lcm(ans, cnt)
print(int(ans))