polya第二题,没有难度。
/*************************************************************************
> File Name: poj2409.cpp
> Author: zhengnanlee
> Mail: zhengnanlee@hotmail.com
> Created Time: 2013年09月24日 星期二 16时34分20秒
************************************************************************/
#include <iostream>
#include <math.h>
using namespace std;
int gcd(int v1, int v2)
{
while(v2)
{
int temp = v2;
v2 = v1 % v2;
v1 = temp;
}
return v1;
}
int main()
{
int n, m;
while(cin>>n>>m && (n || m))
{
int ans = 0;
for(int i = 1; i <= m; i++)
{
ans += pow(n, gcd(i,m));
}
if(m & 1)
{
ans += m * pow(n, m / 2 + 1);
}
else
{
ans += (m / 2) * pow(n, m / 2) + m / 2 * pow(n, m / 2 + 1);
}
ans /= m * 2;
cout << ans << endl;
}
return 0;
}