雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

polyd计数——pku2409

Posted on 2011-05-03 22:35  huhuuu  阅读(288)  评论(0编辑  收藏  举报
View Code
#include<stdio.h>
#include
<math.h>
__int64 gcd(
int a,int b)
{
if(b==0)return a;
else gcd(b,a%b);
}

int main()
{
int c,n;
while(scanf("%d%d",&c,&n),c&&n)
{
__int64 add
=0;
int i;

for(i=1;i<=n;i++)
{
add
+=(__int64)pow(c*1.0,gcd(n,i)*1.0);
}

if(n&1) //翻转的情况
add+=(__int64)pow(c*1.0,(n+1)/2*1.0)*n;
else
{
add
+=(__int64)pow(c*1.0,(n+2)/2*1.0)*(n/2);
add
+=(__int64)pow(c*1.0,(n/2)*1.0)*(n/2);
}

printf(
"%I64d\n",add/n/2);
}
}