zoj1873 Let it Bead

Posted DUXT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zoj1873 Let it Bead相关的知识,希望对你有一定的参考价值。

思路:polya裸题,如果是旋转,对于旋转i格的循环节长度len=lcm(i,n)/i,个数就是n/len=gcd(i,n);如果是翻转,奇数个点对称轴就是一个点一条边,那么循环节个数即n/2+1,

偶数个点有n/2条对称轴穿过两个点,循环节个数是n/2+1,n/2条对称轴穿过两条边,循环节个数就是n/2,然后直接套polya公式即可。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 
 8 int n,m;
 9 
10 int gcd(int a,int b){
11     return b==0?a:gcd(b,a%b);
12 }
13 
14 long long power(int a,int k){
15     if (k==0) return 1;
16     if (k==1) return a;
17     int x=power(a,k/2),ans=x*x;
18     if (k&1) ans*=a;
19     return ans;
20 }
21 
22 int main(){
23     while (scanf("%d%d",&m,&n)!=EOF){
24         if (n==0 && m==0) break;
25         long long ans=0;
26         for (int i=1;i<=n;i++) ans+=power(m,gcd(n,i));
27         if (n&1) ans+=n*power(m,n/2+1);else ans+=n/2*power(m,n/2)+n/2*power(m,n/2+1);
28         printf("%lld\\n",ans/(n*2));
29     }
30 } 
View Code

以上是关于zoj1873 Let it Bead的主要内容,如果未能解决你的问题,请参考以下文章

Zju1961 Let it Bead

POJ 2409 Let it Bead(Polya)

POJ 2409 Let it Bead(置换burnside引理)

[POJ2409]Let it Bead - Polya定理

[ACM] POJ 2409 Let it Bead (Polya计数)

POJ 2409-Let it Bead(Polya计数)