poj 2409 Let it Bead
2013-04-14 19:40
295 查看
组合数学的题目
想学好得好好看看 burnside,polya定理,和它的推导。
#include
#include
#include
using namespace std;
int po(int t,int p)
{
int tmp=t;
for(inti=2;i<=p;i++)
tmp*=t;
return(tmp);
}
int gcd(int a,int b)
{
while(a%b)
{
int m=a%b;
a=b;
b=m;
}
return(b);
}
int main()
{
int c,s;
while(scanf("%d%d",&c,&s),c&&s)
{
int ans=0;
for(int i=1;i<=s;i++)
{
ans+=po(c,gcd(i,s));
}
if(s%2==1)
{
inttmp=(s+1)/2,t=1;
for(inti=1;i<=tmp;i++)
t*=c;
ans+=s*t;
}
else
{
inttmp=s/2,t=1;
for(inti=1;i<=tmp;i++)
t*=c;
ans+=s*t/2;
t*=c;
ans+=s*t/2;
}
printf("%d\n",ans/(2*s));
}
return 0;
}
想学好得好好看看 burnside,polya定理,和它的推导。
#include
#include
#include
using namespace std;
int po(int t,int p)
{
int tmp=t;
for(inti=2;i<=p;i++)
tmp*=t;
return(tmp);
}
int gcd(int a,int b)
{
while(a%b)
{
int m=a%b;
a=b;
b=m;
}
return(b);
}
int main()
{
int c,s;
while(scanf("%d%d",&c,&s),c&&s)
{
int ans=0;
for(int i=1;i<=s;i++)
{
ans+=po(c,gcd(i,s));
}
if(s%2==1)
{
inttmp=(s+1)/2,t=1;
for(inti=1;i<=tmp;i++)
t*=c;
ans+=s*t;
}
else
{
inttmp=s/2,t=1;
for(inti=1;i<=tmp;i++)
t*=c;
ans+=s*t/2;
t*=c;
ans+=s*t/2;
}
printf("%d\n",ans/(2*s));
}
return 0;
}
相关文章推荐
- POJ 2409 Let it Bead(Polya计数原理)
- POJ2409--Let it Bead--Polya
- POJ 2409 - Let it Bead【Polya定理】
- POJ 2409-Let it Bead(Polya定理-旋转+翻转 串项链)
- POJ 2409 Let it Bead(Polya定理)
- POJ 2409 Let it Bead(polya裸题)
- POJ 2409 Let it Bead (polya计数,burnside染色)
- POJ 2409 Let it bead 【裸polya】
- poj_2409_Let it Bead(polya计数)
- poj 2409 Let it Bead 【poyla计数 打表】
- 【POJ】2409 Let it Bead
- POJ_2409 Let it Bead(Polya定理)
- POJ 2409 Let it Bead
- [Polya] POJ 2409 Let it Bead
- poj 2409 Let it Bead 项链旋转+对称群的polya计数
- poj2409--Let it Bead(置换群+polya奇数)
- POJ 2409 Let it Bead
- poj2409 Let it Bead(置换群+Polya定理+Burnside引理)
- poj2409 Let it Bead(polya)
- POJ 2409 Let it Bead(Polya简单应用)