polyd计数——pku2409

polyd计数——pku2409 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 );
}
}

你可能感兴趣的:(pku)