zoukankan      html  css  js  c++  java
  • Ploya定理学习笔记

    由于自己的作息极其不规律导致比赛被打爆了 但是有的时候状态其实还行。

    关于Ploya定理其实特别有意思 这里粘一个[dalao的blog](https://blog.csdn.net/lyc1635566ty/article/details/52545355)

    以后有时间了我再写Ploya定理的证明吧。

    LINK:[POJ Color](http://poj.org/problem?id=2154)

    题目大意:给一个长度为n的项链用n种颜色进行染色 项链可以旋转求有多少种本质不同的方案数。

    怎么说,ploya裸题 显然一共有n种置换 每种置换之中循环节的个数是多少呢?

    经过不断试验 发现对于旋转i个位置的置换 循环节个数为gcd(i,n);

    于是本质不同的方案数$L=frac{1}{|G|}sum{n^{gcd(i,n)}}$

    但是$nleq 1000000000$ 且有T组询问$Tleq 3500$

    我们暴力显然是过不了的 考虑一番特殊性质 设$d=gcd(i,n)$那么显然有d|n d一定是n的因数我们知道n的因数的数量级有$sqrt{n}$

    所以我们要是可以先办法对于$sqrt{n}$这么多个因数各自算出数量显然也是可以得到答案的。

    那么 现在存在一个子问题 $sum_{i=1}^{n}{gcd(i,n)}$ 这个东西怎么求.

    这是一个非常经典的问题了,这等价于 $sum_{d|n}sum_{i=1}^{frac{n}{d}}{dcdot [gcd(i,frac{n}{d})=1]}$

    好像推不下去了 其实这个时候该反演了...我们莫比乌斯反演一下

    $sum_{k|n}mu(k)sum_{d|frac{n}{k}}frac{n}{k}$

    我也无能为力了 推到死胡同了...自闭。

    那么我们从另一个方面再继续推 $sum_{d|n}sum_{i=1}^{frac{n}{d}}{dcdot [gcd(i,frac{n}{d})=1]}$

    我们发现后面那个东西其实是欧拉函数 那么上式=$sum_{d|n}dcdot phi(frac{n}{d})$

    这里我们暴力枚举d 再暴力算$phi(frac{n}{d})$肯定会T

    不妨将n质因数分解了然后 接爆搜因数 这样计算欧拉函数会快很多很多 复杂度sqrt(n)+1000左右不算很高.

    当然 还有一种异常靠谱的方法 这里给出[blog链接](https://www.cnblogs.com/zhchoutai/p/8450361.html) 不太懂这种方法.

    回归到原题上求: $L=frac{1}{|n|}sum{n^{gcd(i,n)}}$ 其实就就是 d变成了 $d^{n-1}$罢了 (爆搜可行..

  • 相关阅读:
    OCX控件的注册卸载,以及判断是否注册
    SimpleJdbcTemplate批量更新(BeanPropertySqlParameterSource)
    hibernateTemplate封装jdbc的一个简单思路
    Dao层查询
    ==与equals方法的区别(Java基础)
    中文乱码解决办法
    spring核心配置文件_ActiveMQ消息队列配置
    spring核心配置文件_Elasticsearch搜索配置
    spring核心配置文件_数据库连接信息
    spring核心配置文件_数据库连接信息_数据库信息
  • 原文地址:https://www.cnblogs.com/chdy/p/12271276.html
Copyright © 2011-2022 走看看