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);

 }

}

你可能感兴趣的:(OJ)