poj2409 polya定理经典问题


/*
ID: neverchanje
PROG:
LANG: C++11
*/
#include<vector>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<set>
#include<queue>
#include<map>
#define INF 0Xfffffffff
#define st_size (1<<18)-1
#define maxn
typedef long long ll;
using namespace std;

int c,s;
ll pow[36];

int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}

int main(){
// freopen("a.txt","r",stdin);
// freopen(".out","w",stdout);
while(cin>>c>>s){
if(c==0 && s==0) break;

pow[0]=1;
for(int i=1;i<=s;i++) pow[i]=pow[i-1]*c;

int res=0;
for(int i=1;i<=s;i++) res+=pow[gcd(s,i)];

if(s&1) res += s*pow[s/2+1];
else res += s/2*pow[s/2]+s/2*pow[s/2+1];

printf("%d\n",res/(s*2));
}
return 0;
}

/*
DESCRIPTION:
项链的旋转是polya定理的基本问题
polya定理:
sum(C(f))/|f| //burnside引理
C(f)=k^m(f) //k为颜色数,m(f)为循环数

置换是旋转:
给项链编号0,1,2,...s-1
可连续旋转0,1,2,3,....,s-1个珠子,对应|f|=s个置换
每个置换都有k=c

对s=6
转6(即不转) m(f)=6
转1 m(f)=1
转2 m(f)=2
转3 m(f)=3
转4 m(f)=2
转5 m(f)=1
可发现m(f)=gcd(i,s) //i表示转几个
m(f)<=s

置换是翻转:
分奇偶判断
*/

poj2409 polya定理经典问题

时间: 2024-10-09 15:02:16

poj2409 polya定理经典问题的相关文章

[POJ1286&amp;POJ2154&amp;POJ2409]Polya定理

Polya定理 L=1/|G|*(m^c(p1)+m^c(p2)+...+m^c(pk)) G为置换群大小 m为颜色数量 c(pi)表示第i个置换的循环节数 如置换(123)(45)(6)其循环节数为3 ------------------------------------------------------------------------------------------- POJ1286&POJ2409 都是简单的处理串珠子的问题. 题目中隐藏着3种不同的置换类别. 1.旋转 注意不

[POJ2409]Let it Bead - Polya定理

[POJ2409]Let it Bead Time Limit: 1000MS   Memory Limit: 65536K Description "Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. As you can deduce from the company name, their business is beads. Their PR department found

poj2409:Let it Bead(置换群 polya定理)

题目大意:长度为n的项链,要染m种颜色,可以通过旋转或翻转到达的状态视为同一种,问有多少种染色方案. 学了一波polya定理,发现很好理解啊,其实就是burnside定理的扩展. burnside定理告诉我们不同染色方案数是每种置换的不变元素个数除以置换总数,而polya定理就是在这个基础上用公式计算出置换的不变元素个数.而且polya定理非常好理解,我们要让元素不变,所以对于每个循环节我们要染一样的颜色,有m种颜色,c(pk)个循环节,于是每种置换的不变元素个数就是m^c(pk). 对于这道题

POJ2409 Let it Bead【Polya定理】

题目链接: http://poj.org/problem?id=2409 题目大意: 给定M种颜色的珠子,每种颜色珠子的个数均不限,将这些珠子做成长度为N的项链. 问能做成多少种不重复的项链,最后的结果不会超过int类型数据的表示范围.并且两 条项链相同,当且仅当两条项链通过旋转或是翻转后能重合在一起,且对应珠子的颜 色相同. 解题思路: Polya定理的应用.先来看Polya定理. Polya定理:设 G = {a1,a2,-,ag}是 N 个对象的置换群,用 M 种颜色给这 N 个 对象着色

【群论】polya定理

对Polya定理的个人认识     我们先来看一道经典题目:     He's Circles(SGU 294)         有一个长度为N的环,上面写着“X”和“E”,问本质不同的环有多少个(不能旋转重复就称之为本质不同) 输入样例:4 输出样例:6 那么要怎么办呢?暴力显然暴不出来…… 我们可以考虑使用置换群. 我们有两种算法: ①Burnside引理: 答案直接为1/|G|*(D(a1)+D(a2)+D(a3)+……+D(as)) 其中D(ak)为在进行置换群置换操作ak下不变的元素的

POJ1286 Necklace of Beads【Polya定理】

题目链接: http://poj.org/problem?id=1286 题目大意: 给定3种颜色的珠子,每种颜色珠子的个数均不限,将这些珠子做成长度为N的项链. 问能做成多少种不重复的项链,最后的结果不会超过int类型数据的表示范围.并且两 条项链相同,当且仅当两条项链通过旋转或是翻转后能重合在一起,且对应珠子的颜 色相同. 解题思路: 这道题和POJ2409是一样的题目,只不过这道题规定了颜色数目. Polya定理的应用.先来看Polya定理. Polya定理:设 G = {a1,a2,-,

hdu 1817 Necklace of Beads(Polya定理)

Necklace of Beads Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 630    Accepted Submission(s): 232 Problem Description Beads of red, blue or green colors are connected together into a circular

【poj2154】Color Polya定理+欧拉函数

题目描述 $T$ 组询问,用 $n$ 种颜色去染 $n$ 个点的环,旋转后相同视为同构.求不同构的环的个数模 $p$ 的结果. $T\le 3500,n\le 10^9,p\le 30000$ . 题解 Polya定理+欧拉函数 根据 poj2409 中得到的结论,答案为: $\frac{\sum\limits_{i=1}^nn^{\gcd(i,n)}}n=\sum\limits_{i=1}^nn^{\gcd(i,n)-1}$ 由于 $n$ 有 $10^9$ 之大,因此考虑优化这个式子. 枚举

[BZOJ1004] [HNOI2008] Cards (Polya定理)

Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色,Sg张绝色.他又询问有多少种方案,Sun想了一下,又给出了正确答案. 最后小春发明了M种不同的洗牌法,这里他又问Sun有多少种不同的染色方案.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗成另一种.Sun发现这个问题有点难度,决