【算法训练】POJ1286 Necklace of Beads(Polya定理)

题意

Beads of red, blue or green colors are connected together into a circular necklace of n beads ( n < 24 ). If the repetitions that are produced by rotation around the center of the circular necklace or reflection to the axis of symmetry are all neglected, how many different forms of the necklace are there?
注意考虑对称翻转。

题解

Polya定理
这里写图片描述

代码

#include<cstdio>
#include<algorithm>
using namespace std;
typedef double db;
typedef long long ll;
typedef unsigned long long ull;
const int nmax = 1e6+7;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const ull p = 67;
const ull MOD = 1610612741;
ll n,ans;
ll pow(ll t,ll b = 3ll){ return b * (t == 0?1ll:pow(t-1));}
int main(){
    while(scanf("%lld",&n)!=EOF && n !=-1){
        if(n == 0){ printf("0\n"); continue;}
        ans = 0;
        for(int i = 1;i<=n;++i)ans += pow(__gcd(n,1ll*i)-1);
        ans = ans / n;
        ans += (pow((n+1)/2-1) + pow(n/2+1-1))/2;
        printf("%lld\n",ans/2);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/pengwill97/article/details/81513839