POJ 2409 Let it Bead(Polya定理)

点我看题目

题意 :给你c种颜色的n个珠子,问你可以组成多少种形式。

思路 :polya定理的应用,与1286差不多一样,代码一改就可以交。。。。POJ 1286题解

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>

using namespace std;

int gcd(int a,int b)
{
    return b > 0 ? gcd(b,a%b) : a ;
}
int main()
{
    int c,s ;
    while (scanf("%d %d", &c, &s) != EOF)
    {
        if(c == 0 && s == 0) break ;
        int sum = 0;
        for (int i = 1; i <= s; i++)
            sum += pow(c, gcd(i, s));
        if (s & 1)
            sum += s * pow(c, s / 2 + 1);
        else
            sum += s / 2 * pow(c, s / 2) + s / 2 * pow(c, s / 2 + 1);
        sum /= s * 2;
        printf("%d
", sum);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3562547.html