poj1286

题意:与2409类似,只是只能有3种颜色。

分析:详见2409,注意输入0的情况。

View Code
#include <iostream>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <cmath>

using namespace std;



int n, m;



int gcd(int a, int b)

{

    b = b % a;

    while (b)

    {

        a = a % b;

        swap(a, b);

    }

    return a;

}



int main()

{

    //freopen("t.txt", "r", stdin);

    n = 3;

    while (scanf("%d", &m), ~m)

    {

        if (m == 0)

        {

            printf("0\n");

            continue;

        }

        long long 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;

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

    }

    return 0;

}

你可能感兴趣的:(poj)