洛谷P3307 [SDOI2013]项链 [polya定理,莫比乌斯反演]
思路
很明显的一个思路:先搞出有多少种珠子,再求有多少种项链。
珠子
考虑这个式子:
\[
S3=\sum_{i=1}^a \sum_{j=1}^a\sum_{k=1}^a [\gcd(i,j,k)==1]
\]
显然可以莫比乌斯反演一波,但这个是对的吗?
当有两个数字相同时只被算了3遍,而三个都相同的只被算了一遍。
\[
S2=\sum_{i=1}^a\sum_{j=1}^a [\gcd(i,j)==1]
\]
显然有\(S1=1\),那么就会得到最终答案:
\[
ans=\frac 1 6 (S3+3S2+2)
\]
项链
既然要求旋转之后不相同,那么自然想到polya定理。
设不同珠子的个数为\(m\),那么可以得到
\[
ans=\frac 1 n \sum_{d|n}f(d)\varphi(\frac n d)
\]
其中\(f(d)\)表示\(d\)个珠子串成项链,使得相邻的不相等的概率,注意不能旋转,且\(f(1)=0\)。
考虑从右往左数第二个是否和从左往右数第一个相同,那么有
\[
f_n=(m-2)f_{n-1}+(m-1)f_{n-2}
\]
边界条件:\(f_1=0,f_2=m(m-1)\)。
可以看出这是个线性齐次XXXX递推式,用特征根可以得到
\[
x_1=-1,x_2=m-1\\
\alpha = m-1,\beta=1
\]
所以得到\(f_d=(m-1)^d+(-1)^d(m-1)\),可以\(O(\log d)\)得到了。
于是\(ans\)似乎也可以很快得到了。
汇总
总结一下算法流程:先整除分块处理出\(m\),然后polya定理搞出答案。
有一个问题:\(\varphi(\frac n d)\)怎么快速算出来?
看大佬的做法,都是先给\(n\)分解质因数,然后\(dfs\)枚举每种组合,一次性把\(\varphi(d)\)全都求出来,复杂度似乎是\(O(n的因数个数)\),也就不超过\(O(\sqrt n)\)。
还有一个问题:\(n\)是模数的倍数时怎么办?
改成\(MOD=mod^2\),就不会出现这种情况了,最后输出答案时好像还要用奇奇怪怪的方法搞一搞。
代码
咕咕咕咕咕咕
以后再写吧。
洛谷P3307 [SDOI2013]项链 [polya定理,莫比乌斯反演]的更多相关文章
- 洛谷 P3307 - [SDOI2013]项链(Burnside 引理+数论)
题面传送门 看到题目我们显然可以将题目拆分成两部分:首先求出有多少个符合要求的珠子 \(c\),这样我们就可以将每种珠子看成一种颜色,题目也就等价于有多少种用 \(c\) 种颜色染长度为 \(n\) ...
- 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)
P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...
- 洛谷P2522 [HAOI2011]Problem b (莫比乌斯反演+容斥)
题意:求$\sum_{i=a}^{b}\sum_{j=c}^{d}[gcd(i,j)==k]$(1<=a,b,c,d,k<=50000). 是洛谷P3455 [POI2007]ZAP-Qu ...
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
传送门 我们考虑容斥,设$ans(a,b)=\sum_{i=1}^a\sum_{j=1}^b[gcd(a,b)==k]$,这个东西可以和这一题一样去算洛谷P3455 [POI2007]ZAP-Quer ...
- 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...
- 洛谷3704 [SDOI2017] 数字表格 【莫比乌斯反演】
题目分析: 比较有意思,但是套路的数学题. 题目要求$ \prod_{i=1}^{n} \prod_{j=1}^{m}Fib(gcd(i,j)) $. 注意到$ gcd(i,j) $有大量重复,采用莫 ...
- 洛谷P2257 YY的GCD(莫比乌斯反演)
传送门 原来……莫比乌斯反演是这么用的啊……(虽然仍然不是很明白) 首先,题目所求如下$$\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prim]$$ 我们设$f(d)$表示$g ...
- 洛谷 P2522 [HAOI2011]Problem b (莫比乌斯反演+简单容斥)
题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
- 洛谷$P$2522 $Problem\ b\ [HAOI2011]$ 莫比乌斯反演
正解:莫比乌斯反演 解题报告: 传送门! 首先看到这个显然就想到莫比乌斯反演$QwQ$? 就先瞎搞下呗$QwQ$ $gcd(x,y)=k$,即$gcd(\left \lfloor \frac{x}{k ...
随机推荐
- ajax属性详解
https://blog.csdn.net/mooncom/article/details/52402836 资料库: $.ajaxSetup()方法为将来的ajax请求设置默认值. http://w ...
- qsort.c源码
/* 版权所有(C) 1991-2019 自由软件资金会. 该文件属于是GUN C语言函数库,由Douglas C. Schmidt(schmidt@ics.uci.edu)所写. GUN C语言函数 ...
- 二、Redis安装
一.下载Redis: 下载地址:https://github.com/MSOpenTech/redis/releases. 由于redis并不支持window系统,而window版本的redis的是由 ...
- Python进阶8---面向对象基础1
面向对象 语言的分类 Python的类 定义 class ClassName: pass class MyCalss: """A example class"& ...
- kettle变量(var变量)
设置变量/set varibale 1.定义变量(子转换): 原始数据 设置获取变量:点击获取字段,自动获取变量名称和字段名称 引用变量: 输出: kettle.properties 文件存储在.ke ...
- socket传输数据循环多次的性能要好于一次
今天做了一个测试,测试使用python的socket传输一个588k的数据,当传输过程执行一次时,执行时间为2ms左右.我觉着执行一次的时间并不能说明问题,于是就写了一个循环,循环执行1000次,然后 ...
- AWS Step Function Serverless Applications
Installing VS Components To follow along with this article, you must have an AWS account and install ...
- vue关于为空使用默认值
参考地址:https://segmentfault.com/q/1010000009898107/a-1020000009898747 实现效果如下:
- nginx 配置详解(转)
nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...
- JavaScript中new实现原理
JavaScript中new实现原理 1.创建一个空对象 obj 2.将该对象 obj 的原型链 __proto__ 指向构造函数的原型 prototype, 并且在原型链 __proto__ 上设置 ...