組合數學——置換群
阿新 • • 發佈:2018-12-18
置換群
題解:求出每個數的迴圈節,求最小公倍數即可。
//置換群 #include<iostream> #include<cstdio> using namespace std; const int N=1e3+10; int p[N]; int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } int lcm(int a,int b){ return a/gcd(a,b)*b; } int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&p[i]); int ans=1,tmp,cnt; for(int i=1;i<=n;i++){ int tmp=p[i]; cnt=1; while(tmp!=i){ cnt++; tmp=p[tmp]; } //printf("%d\n",cnt); ans=lcm(ans,cnt); } printf("%d\n",ans); return 0; }