码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1286 Necklace of Beads【polya定理+burnside引理】

时间:2018-07-04 13:24:05      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:+=   while   ace   amp   return   name   gcd   pac   beads   

和poj 2409差不多,就是k变成3了,详见
还有不一样的地方是记得特判n==0的情况不然会RE

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

poj 1286 Necklace of Beads【polya定理+burnside引理】

标签:+=   while   ace   amp   return   name   gcd   pac   beads   

原文地址:https://www.cnblogs.com/lokiii/p/9262397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!