poj 2409 Let it Bead(polya)

xiaoxiao2021-02-27  97

m种颜色给n个珠子染色,n个珠子围成了一圈,具有对称性的计数,裸的polya。

#include <stdio.h> int m,n; int gcd(int a, int b) { if(b == 0) return a; return gcd(b,a%b); } int pow(int a, int b) { int ret = 1; while(b) { if(b&1) ret = ret*a; a = a*a; b >>= 1; } return ret; } int main() { int sum; while(scanf("%d %d",&m,&n) && m+n) { sum = 0; //n种旋转的情况 for(int i = 1; i <= n; ++i) { int tmp = gcd(n,i); sum += pow(m,tmp); } //反转的情况 if(n&1) sum += n*pow(m,(n+1)/2); else { sum += (n/2)*pow(m,(n+2)/2); sum += (n/2)*pow(m,n/2); } sum = sum/(2*n);//旋转有n个置换,翻转有n个置换 printf("%d\n",sum); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-17237.html

最新回复(0)