poj2409

polya第二题,没有难度。

/*************************************************************************
	> File Name: poj2409.cpp
	> Author: zhengnanlee 
	> Mail: [email protected]  
	> 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;
}


你可能感兴趣的:(组合数学,ACM题解报告)