poj 2049(polya)
2015-12-19 17:57
183 查看
poj 2049
题目大意:m种颜色给长度为n的项链上色,要求旋转、翻转重合算一种,求总数;
polya : 1|G| * (mc(a1) + mc(a2) +…+ mc(an))
旋转:c(ai) = gcd(n, i)
翻转:
n 为奇数,共有n个循环节数为(n + 1) / 2的循环群;
n为偶数, 共有n / 2个循环节数为(n + 2) / 2的循环群,n / 2个循环节数为n / 2;
题目大意:m种颜色给长度为n的项链上色,要求旋转、翻转重合算一种,求总数;
polya : 1|G| * (mc(a1) + mc(a2) +…+ mc(an))
旋转:c(ai) = gcd(n, i)
翻转:
n 为奇数,共有n个循环节数为(n + 1) / 2的循环群;
n为偶数, 共有n / 2个循环节数为(n + 2) / 2的循环群,n / 2个循环节数为n / 2;
#include <iostream> #include <cmath> using namespace std; int gcd(int a, int b) { return (b == 0) ? a : gcd(b, a % b); } int main() { int n, m; while (~scanf("%d%d", &m, &n)) { if (n == 0 && m == 0) { break; } int sum = 0; for (int i = 1; i <= n; i++) { int tmp = gcd(n, i); sum += (int)(pow(m * 1.0, tmp * 1.0)); } if (n & 1) { sum += (int)(n * pow(m * 1.0, (n + 1) / 2.0)); } else { sum += (int)((n / 2) * pow(m * 1.0, (n + 2) / 2.0)); sum += (int)((n / 2) * pow(m * 1.0, n / 2.0)); } sum /= (2 * n); printf("%d\n", sum); } return 0; }
相关文章推荐
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ2154-Daze polya计数法优化
- poj 2154 Color
- HDU-4633 poyla计数
- Necklace of Beads
- Let it Bead
- Pólya定理初探
- POJ1286,2409——Let it Bead,Necklace of Beads( Pólya定理)
- POJ2154——Color(Polya定理+筛素数+欧拉函数)
- polya计数回顾
- polya计数回顾
- POLYA合集
- POLYA合集 II
- UVA11255 necklace (polya定理)
- HDU-3923-Invoker
- Polya计数
- Burnside&Polya总结
- POJ2154 Polya+欧拉函数
- 漫谈OI中的群论入门
- 组合数学 转动群