Necklace of Beads

2014-11-23 23:30:13 · 作者: · 浏览: 4
// File Name: poj1286.cpp  
// Author: bo_jwolf  
// Created Time: 2013年10月07日 星期一 21:31:08  
  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
  
#define INT long long int  
  
using namespace std;  
INT gcd( INT a, INT b){  
    return b == 0  a: gcd( b, a % b );  
}  
  
INT c = 3, s;  
INT polya(){  
    INT ans = 0;  
    for( INT i = 0; i < s; ++i ){  
        ans += (INT)pow( 1.0 * c, gcd( s, i ) );  
    }  
    if( s % 2 ){  
        ans += s * ( INT )pow( 1.0 * c, ( s / 2 + 1 ) );  
    }  
    else{  
        ans += s / 2 * ( INT )pow( 1.0 * c, s / 2 );  
        ans += s / 2 * ( INT )pow( 1.0 * c, s / 2 + 1 );  
    }  
    return ans / 2 / s;  
}  
  
int main(){  
    INT ans;  
    while( scanf( "%lld", &s ) != EOF ){  
            if( s == -1 )  
                break;  
            if( s == 0 )  
                ans = 0;  
            else  
                ans = polya();  
            printf( "%lld\n", ans );  
    }  
return 0;  
}