哎,最後發一波了,明天就可以滾了嗚嗚嗚~
沒錯,這就是pkusc的那道板子題!
可是不會polya,所以打表過的2333
Burside引理:本質不同的染色方案數等於每種置換不變元素的個數的平均數
polya定理:m染色,方案數 =
題目大意:m染色n個點的環,求方案數(翻轉,旋轉)
(旋轉
易得共有 n 種置換,轉 i 格的循環節長度
(翻轉
1) n 爲奇數
有 n 條對稱軸,每種的循環節數爲
2) n 爲偶數
1.以兩個點的連線爲對稱軸,有
2.以相鄰點連線的中垂線爲對稱軸,有
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m,ans;
int gcd(int a,int b)
{
return b ? gcd(b,a % b) : a;
}
int ksm(int a,int b)
{
int ret = 1;
for (;b;b >>= 1,a = a * a)
if (b & 1) ret *= a;
return ret;
}
int main()
{
while (~scanf("%d%d",&m,&n) && n && m)
{
ans = 0;
for (int i = 0;i < n;i ++) ans += ksm(m,gcd(i,n));
if (n & 1) ans += n * ksm(m,n / 2 + 1);
else ans += n / 2 * ksm(m,n / 2) + n / 2 * ksm(m,n / 2 + 1);
ans /= n * 2;
cout << ans << endl;
}
return 0;
}