10294 Arif in Dhaka (First Love Part 2)
阿新 • • 發佈:2018-12-12
連結
定理介紹
Burnside引理
對於一個置換,若一個著色方案經過置換後不變,則是的一個不動點,將的不動點的數目記作,那麼等價類的數目就是的平均數
Pólya定理
假設有種顏色,如果置換能寫成種迴圈,那麼等價類的個數就是的平均數
題解
對於項鍊,顯然我們有種置換,我們給項鍊編號為,對於一種置換如果我把每顆珠子向後移的距離,那麼這棵珠子會移到 這個迴圈中的元素個數為 此置換共有個迴圈 所以項鍊個數就是 對於手鐲,又多了對稱這種置換 當為奇數時,有條對稱軸,每種置換迴圈的個數為 所以答案就是 當為偶數時,有穿過點和穿過軸的兩種對稱軸,最終算出答案是
程式碼
//置換 polya定理
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll fastpow(ll a, ll b)
{
ll t=a, ans=1;
for(;b;b>>=1,t=t*t)if(b&1)ans*=t;
return ans;
}
ll gcd(ll a, ll b){return !b?a:gcd(b,a%b);}
int main()
{
ll n, t, ans, i;
while(~scanf("%lld%lld",&n,&t))
{
ans=0;
for(i=0;i<n;i++)ans+=fastpow(t,gcd(n,i));
printf("%lld ",ans/n);
if(n&1)ans+=n*fastpow(t,n/2+1);
else ans+=n/2*fastpow(t,n/2)+n/2*fastpow(t,n/2+1);
printf("%lld\n",ans/n/2);
}
return 0;
}