組合數學——置換群 POJ 2396 Permutations
阿新 • • 發佈:2018-12-18
1. 4,1,5,2,3->2,4,3,1,5->1,2,5,4,3->4,1,3,2,5->2,4,5,1,3->1,2,3,4,5->4,1,5,2,3
要經過6次對映能變回4,1,5,2,3(迴圈節的最小公倍數)
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int namx=1010; int num[namx]; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int lcm(int a,int b) { return a/gcd(a,b)*b; } int main() { int n; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) cin>>num[i]; int ans=1; for(int i=1;i<=n;i++) { int t=num[i]; int cnt=1; while(t!=i) { t=num[t]; cnt++; } ans=lcm(ans,cnt); } cout<<ans<<endl; } return 0; }