Let it Bead

http://poj.org/problem?id=2409

 

// File Name: poj2409.cpp

// Author: bo_jwolf

// Created Time: 2013年10月08日 星期二 14:31:08



#include<vector>

#include<list>

#include<map>

#include<set>

#include<deque>

#include<stack>

#include<bitset>

#include<algorithm>

#include<functional>

#include<numeric>

#include<utility>

#include<sstream>

#include<iostream>

#include<iomanip>

#include<cstdio>

#include<cmath>

#include<cstdlib>

#include<cstring>

#include<ctime>



#define INT long long int



using namespace std;

INT gcd( INT a, INT b){

	return b == 0? a: gcd( b, a % b );

}



INT c, 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%lld", &c, &s ) != EOF ){

			if( !c && !s )

				break;

			ans = polya();

			printf( "%lld\n", ans );

	}

return 0;

}


 

 

你可能感兴趣的:(it)