//poj 2409
//sep9
#include<iostream>
using namespace std;
typedef __int64 INT;
INT pow[32];
INT gcd(INT a,INT b)
{
return a%b==0?b:gcd(b,a%b);
}
int main()
{
INT m,n;
while(scanf("%I64d%I64d",&m,&n)==2){
if(n==0&&m==0)
break;
pow[0]=1;
for(INT i=1;i<=n;++i)
pow[i]=pow[i-1]*m;
INT ans=n&1?n*pow[n/2+1]:(n/2)*pow[n/2]+(n/2)*pow[n/2+1];
for(INT i=0;i<n;++i)
ans+=pow[gcd(i,n)];
printf("%I64d\n",ans/(2*n));
}
return 0;
}
poj 2409 Let it Bead 项链旋转+对称群的polya计数
最新推荐文章于 2017-08-18 00:57:00 发布