您的位置:首页 > 其它

poj 2409 Let it Bead

2013-04-14 19:40 295 查看
组合数学的题目
想学好得好好看看 burnside,polya定理,和它的推导。

#include
#include
#include
using namespace std;

int po(int t,int p)
{
int tmp=t;
for(inti=2;i<=p;i++)
tmp*=t;
return(tmp);
}

int gcd(int a,int b)
{
while(a%b)
{
int m=a%b;
a=b;
b=m;
}
return(b);
}

int main()
{
int c,s;
while(scanf("%d%d",&c,&s),c&&s)
{
int ans=0;
for(int i=1;i<=s;i++)
{
ans+=po(c,gcd(i,s));
}
if(s%2==1)
{
inttmp=(s+1)/2,t=1;
for(inti=1;i<=tmp;i++)
t*=c;
ans+=s*t;
}
else
{
inttmp=s/2,t=1;
for(inti=1;i<=tmp;i++)
t*=c;
ans+=s*t/2;
t*=c;
ans+=s*t/2;
}
printf("%d\n",ans/(2*s));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: