可以预见数论推公式是有多么蛋疼。

让我简明扼要的讲讲吧(多都说不出来,毕竟才做了两道题)其实呢,这个算法应该归入群论,有个有用的东西:置换群,它表示一个集合包括很多的置换。
先讲讲置换吧:↓(这是个置换)
1 2 3 4
3 1 2 4
怎么个置换法呢?这个就代表,第1个状态置换后变成第3个状态,第2个状态置换后变成第1个状态,第3个状态置换后变成第2个状态,第4个状态置换后变成第4个状态。
然后就是循环节:
1 2 3 4 5
3 5 1 4 2
它等于:(13)(25)(4)
那循环节长度就等于3

嘿嘿,简单吧。

然后就是一个神奇的定理——polya定理,设这个群{g1,g2,……gG}G为置换群的置换数,c(g)表示这个置换的循环节长度,用m种颜色涂点,那不同的涂色方案为:m^c(g1)+m^c(g2)+m^c(gG)的和除以G(这个我实在是证不出来,死记吧),然而c(g)怎么理解?其实这个来源于Burnside引理,我们将其优化变成polya定理,那这个是什么?

burnside引理:用D(i)表示在置换中不变的个数,怎么理解?例如第一个置换,4就是不变的,那这个置换的D就等于1。那不同的涂色方案就等于ΣGi=1 *D(i)。这个循环节的想法,就是来自于这里的D,同时,由于polya有很大局限性(因为直接用polya题目就太简单啦T>*<T)所以说有很多题都是要用引理+优化。

例题:poj2409

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
LL gcd(LL a,LL b)
{
if(a==)return b;
return gcd(b%a,a);
}
LL power(LL A,LL k)
{
LL ans=;
while(k!=)
{
if(k%==)ans*=A;
A*=A;k/=;
}
return ans;
}
int main()
{
LL n,m;
while(scanf("%lld%lld",&m,&n)!=EOF)
{
if(n==&&m==)break;
LL ans=; for(int i=;i<=n;i++)ans+=power(m,gcd(i,n));
//旋转置换,枚举旋转的豆子个数,置换数为n,循环节长度为LCM(i,n)/i,循环节数为n/(LCM(i,n)/i)=gcd(i,n)
//翻转置换
if(n%==)//假如是奇数,就只有一种情况,n个豆子有n种置换,循环节为(n+1)/2
{
ans+=n*power(m,(n+)/);
}
else//假如是偶数,两种情况,对称轴过豆子或过间隔
{
ans+=n/*power(m,n/);//对称轴过间隔,所有豆子翻转,有n/2种置换,循环节为n/2
ans+=n/*power(m,(n+)/);//对称轴过豆子,两个豆子不变,其他翻转,有n/2种置换,循环节为(n+2)/2
}
printf("%lld\n",ans/(n*));//G=n*2
}
return ;
}

最新文章

  1. LCD内核自带驱动分析
  2. hdu 4288 Coder
  3. @ResultMapping注解
  4. lintcode:背包问题II
  5. 每个android项目都应该使用的android 库
  6. WWDC2016 Session笔记 – Xcode 8 Auto Layout新特性
  7. linux下显卡信息的查看
  8. github三大步骤
  9. EEPlat的元数据驱动的运行引擎
  10. c数据结构学习随笔
  11. android 复制、粘贴文字
  12. EF通用数据层封装类(支持读写分离,一主多从)
  13. jsp窗口关闭的触发函数
  14. 微信小程序之公共函数引入
  15. 【JQ】jq动态绑定事件.on()、解绑事件off()
  16. Beta冲刺! Day5 - 砍柴
  17. AI,大数据,复杂系统 最精 40本大书单
  18. vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
  19. Python3自定义日志类 mylog
  20. Android的组件化和模块化

热门文章

  1. js总结(三):面向对象,prototype ,oo模拟
  2. HDU-5532//2015ACM/ICPC亚洲区长春站-重现赛-F - Almost Sorted Array/,哈哈,水一把区域赛的题~~
  3. 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]-CodeForces 237C,素数打表,二分查找
  4. captcha库报错&quot;OSError: cannot open resource&quot;
  5. sencha architect开发sencha touch应用注意事项
  6. tree(poj 1741)
  7. 【CF766D】Mahmoud and a Dictionary(并查集)
  8. hdu 4045 Machine scheduling [ dp + 斯特林数]
  9. SQL SERVER 2012 第五章 创建和修改数据表 の CREATE语句
  10. easyui combotree选项重复