📄 permutations(找循环节).cpp
字号:
//从单位元,经过lcm(各循环节长度)次置换,重新回复单位元
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
int num[1100], n;
bool vis[1100];
int lcm(int x, int y)
{
int t;
__int64 mul = x*y;
if(x > y) {
std::swap(x,y);
}
while(x) {
t = x;
x = y%x;
y = t;
}
return mul / y;
}
int main()
{
int i, ans;
while(scanf("%d", &n)==1) {
for(i=1;i<=n;i++) {
scanf("%d", num+i);
}
memset(vis,0,sizeof(vis));
ans = 1;
for(i=1;i<=n;i++) {
if(!vis[i]) {
int tpos = i;
int len = 0;
do {
vis[tpos] = true;
tpos = num[tpos];
len ++;
} while(tpos != i);
ans = lcm(ans, len);
}
}
printf("%d\n", ans);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -