题意:3种颜色的珠子串在一起两种置换(翻转和对称),问一共有多少等价类。
(模版题)
Code:
#include <cstdio>
using namespace std;
inline int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
long long sol(int n)
{
long long x=1;
while(n--)
x*=3;
return x;
}
int main()
{
int n;
while(~scanf("%d",&n),n+1)
{
if(!n)
{
printf("0\n");
continue;
}
long long ans=0;
for(int i=0;i<n;i++)
ans+=sol(gcd(n,i));
if(n&1)
{
ans+=sol(n/2+1)*n;
}
else
{
ans+=sol(n/2)*n/2;
ans+=sol(n/2+1)*n/2;
}
ans/=(2*n);
printf("%d\n",ans);
}
return 0;
}