hdoj2409
/***************************************************************\ *Author:Hu Wenbiao *Created Time: Mon 30 Aug 2010 08:53:42 PM CST *File Name: main.cpp *Description:polya定理 \***************************************************************/ //*========================*Head File*========================*\\ #include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> /*----------------------*Global Variable*----------------------*/ //*=======================*Main Program*=======================*// int gcd(int a,int b){ int tmp; while(b){ tmp=a; a=b; b=tmp%b; } return a; } int fun(int t,int c,int s){ int d=gcd(s,t); int ans=1; for(int i=0;i<d;i++) ans*=c; return ans; } int main(){ //freopen("input","r",stdin); int c,s,ans; while(scanf("%d%d",&c,&s)!=EOF&&(c||s)){ if(s&1){//odd ans=(pow(c,s)+s*pow(c,(s+1)>>1)); for(int i=1;i<s;i++) ans+=fun(i,c,s); ans/=(s<<1); } else{//even if(s==2) ans=c*(c+1)>>1; else{ ans=(pow(c,s)+(s>>1)*pow(c,(s+2)>>1)+(s>>1)*pow(c,s>>1)); for(int i=1;i<s;i++) ans+=fun(i,c,s); ans/=(s<<1); } } printf("%d\n",ans); } }