poj 1286 Necklace of Beads -----polya计数

来源:互联网 发布:淘宝旧版本大全 编辑:程序博客网 时间:2024/05/17 19:18

题意:3种颜色的珠子串在一起两种置换(翻转和对称),问一共有多少等价类。

(模版题)


Code:

#include <cstdio>using namespace std;inline int gcd(int a,int b){return b?gcd(b,a%b):a;}long long sol(int n){long long x=1;while(n--)x*=3;return x;}int main(){int n;while(~scanf("%d",&n),n+1){if(!n){printf("0\n");continue;}long long ans=0;for(int i=0;i<n;i++)ans+=sol(gcd(n,i));if(n&1){ans+=sol(n/2+1)*n;}else{ans+=sol(n/2)*n/2;ans+=sol(n/2+1)*n/2;}ans/=(2*n);printf("%d\n",ans);}return 0;}