• //Plóya定理的应用,要记得考虑是否要考虑旋转或者翻转等问题 • #include<stdio.h> • #include<math.h> • int gcd(int a,int b) • { • if(b==0) • return a; • else • return gcd(b,a%b); • } • int main() • { • // freopen("in.txt","r",stdin); • int c, s, i; • __int64 ans,t; • while(scanf("%d%d",&c,&s)) • { • if(c==0 && s==0) • break; • ans = 0; • for(i=1; i<=s; i++)//考虑旋转的情况 • { • ans += (__int64)pow(double(c),(int)gcd(s,i)); • } • //printf("旋转的情况:%d/n",ans/s); • // t=ans; • //考虑翻转的情况 • if(s&1)//珠子数为奇数 • { • ans += (__int64)pow(double(c),(int)((s+1)/2))*s; • } • else • { • ans += (__int64)pow(double(c),(int)(s/2))*(s/2); • ans += (__int64)pow(double(c),(int)((s+2)/2))*(s/2); • } • • printf("%I64d/n",ans/(s*2)); • } • return 0; • }