把以前的题目又做了一遍,复习了一下波利亚定理
#include<stdio.h>
#include<math.h>
double c;
int s;
int gcd(int a,int b) { //求最大公约数
if (b==0) return a;
else return gcd(b,a%b);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
double ans=0;
int i;
while(scanf("%lf%d",&c,&s)) {
if (c==0 && s==0) break;
ans=0;
for(i=0;i<s;i++) {
ans+=pow(c,gcd(s,i)); //旋转i格
}
if (s%2==0) { //翻转
ans+=s/2*pow(c,s/2+1);
ans+=s/2*pow(c,s/2);
}
else {
ans+=s*pow(c,s/2+1);
}
ans=ans/(2*s);
printf("%.0lf\n",ans);
}
return 0;
}