洛谷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 ...
随机推荐
- docker企业实战视频教程
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal. ...
- 百度地图失去坐标html
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Consecutive Sum LightOJ - 1269(区间异或和)
Consecutive Sum 又来水一发blog... 本来是昨天补codechef的题,最后一道题是可持久化字典树,然后去黄学长博客看了看 觉得字典树写法有点不太一样,就想着用黄学长的板子写码几道 ...
- 为知笔记Linux版编译使用记录
本文档长期不定时更新,根据使用情况进行反馈. 目录 编译 Error creating SSL context 无法输入中文 如何打包使用 桌面图标 Markdown Windows 版本差异 常用快 ...
- 洛谷P1072Hankson的趣味题题解
题目 一道十分经典的数论题,在考场上也可以用暴力的算法来解决,从而得到\(50pts\)的较为可观的分数,而如果想要AC的话,我们观察原题给的数据范围\(a,b,c,d\)(为了好表示,分别代表a1, ...
- Python中的eval(),exec()以及其相关函数
1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式 ...
- ZooKeeper集群与Leader选举
说说你对ZooKeeper集群与Leader选举的理解? ZooKeeper是一个开源分布式协调服务.分布式数据一致性解决方案.可基于ZooKeeper实现命名服务.集群管理.Master选举.分 ...
- TensorFlow 辨异 —— tf.placeholder 与 tf.Variable
https://blog.csdn.net/lanchunhui/article/details/61712830 https://www.cnblogs.com/silence-tommy/p/70 ...
- pytest 15 fixture之autouse=True
前言 平常写自动化用例会写一些前置的fixture操作,用例需要用到就直接传该函数的参数名称就行了.当用例很多的时候,每次都传这个参数,会比较麻烦.fixture里面有个参数autouse,默认是Fa ...
- seq2seq
seq2seq: seq2seq就是将输入序列经过encoder-decoder变成目标序列. 如图所示,输入序列是 [A, B, C, <EOS>],输出序列是 [W, X, Y, Z ...