Luogu3307:[SDOI2013]项链
传送门
求每个珠子的方案数
即有序的求三元组 \((x,y,z),x,y,z\le a\) 满足 \(gcd(x,y,z)=1\)
设 \(G_i\) 表示 \(i\) 个小于等于 \(a\) 的有序数字,满足 \(gcd=1\) 的方案数
容斥得到要求的
\]
然后 \(G_1=1\)
运用简单莫比乌斯反演得到
\]
\]
求项链条数
运用 \(Polya\) 定理
设 \(f(x)\) 表示 \(x\) 的点的环,选择上面求出的 \(m\) 种颜色,同色不相邻的方案数
那么要求的就是
\]
求f
容斥不好做
朴素想法是枚举开始和结尾的颜色,显然也不好做
考虑增量算 \(f(x)\)
首先可以断开 \(x-1\) 的链
\(x-1\) 的首尾不同,贡献为 \((m-2)f(x-1)\)
\(x-1\) 的首尾相同,贡献为 \((m-1)f(x-2)\)
那么 \(f(x)=(m-2)f(x-1)+(m-1)f(x-2)\)
本题应该是默认 \(f(1)=0\),不然过不了样例
直接构造生成函数 \(F(x)=\sum_{i=0}^{x}f(i)x^i\)
那么 \(F(x)=(m-2)F(x)x+(m-1)F(x-2)x^2+f(2)\)
所以
\]
\(f(x)=(m-1)^x-(-1)^{x-1}(m-1)\)
最后
注意到 \(n\) 可能是 \(10^9+7\) 的倍数
可以考虑对 \((10^9+7)^2\) 取模
如果是倍数,初始答案算出来和 \(n\) 一起除去 \(mod\) 再求逆元即可
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn(1e7 + 5);
const int mod(1e9 + 7);
const ll dmod((ll)mod * mod);
const ll inv6(833333345000000041ll);
inline void Inc(ll &x, ll y) {
x = x + y >= dmod ? x + y - dmod : x + y;
}
inline ll Mul(ll x, ll y) {
return (x * y - (ll)(((long double)x * y + 0.5) / (long double)dmod) * dmod + dmod) % dmod;
}
inline ll Pow1(ll x, ll y) {
register ll ret = 1;
for (x %= mod, y %= mod - 1; y; y >>= 1, x = x * x % mod)
if (y & 1) ret = ret * x % mod;
return ret;
}
inline ll Pow2(ll x, ll y) {
register ll ret = 1;
for (; y; y >>= 1, x = Mul(x, x)) if (y & 1) ret = Mul(ret, x);
return ret;
}
int test, pr[maxn / 10], tot, mu[maxn], cnt;
bitset <maxn> ispr;
ll n, a, ret, ans, d[maxn], ct[maxn];
inline ll Calc(ll x) {
register ll v = Pow2(ret, x);
(x & 1) ? Inc(v, dmod - ret) : Inc(v, ret);
return v;
}
void Dfs(int x, ll v, ll phi) {
if (x > cnt) {
Inc(ans, Mul(phi, Calc(n / v)));
return;
}
register int i;
Dfs(x + 1, v, phi), v = v * d[x], phi = phi * (d[x] - 1), Dfs(x + 1, v, phi);
for (i = 2; i <= ct[x]; ++i) v *= d[x], phi *= d[x], Dfs(x + 1, v, phi);
}
inline void Solve() {
register ll i, j, x;
scanf("%lld%lld", &n, &a), ans = 0, ret = 2;
for (i = 1; i <= a; i = j + 1) {
j = a / (a / i);
Inc(ret, Mul(Mul(Mul((a / i) + 3, a / i), a / i), (mu[j] - mu[i - 1] + dmod) % dmod));
}
ret = Mul(ret, inv6), Inc(ret, dmod - 1);
for (i = 1, cnt = 0, x = n; i <= tot && pr[i] <= x / pr[i]; ++i)
if (x % pr[i] == 0) {
d[++cnt] = pr[i], ct[cnt] = 0;
while (x % pr[i] == 0) x /= pr[i], ++ct[cnt];
}
if (x > 1) d[++cnt] = x, ct[cnt] = 1;
Dfs(1, 1, 1);
if (n % mod) ans = Mul(ans, Pow2(n, dmod - 2)), ans %= mod;
else ans = (ans / mod) % mod * Pow1(n / mod, mod - 2) % mod;
printf("%lld\n", ans);
}
int main() {
register int i, j;
ispr[1] = 1, mu[1] = 1;
for (i = 2; i < maxn; ++i) {
if (!ispr[i]) pr[++tot] = i, mu[i] = -1;
for (j = 1; j <= tot && i * pr[j] < maxn; ++j) {
ispr[i * pr[j]] = 1;
if (i % pr[j]) mu[i * pr[j]] = -mu[i];
else {
mu[i * pr[j]] = 0;
break;
}
}
}
for (i = 2; i < maxn; ++i) mu[i] += mu[i - 1];
scanf("%d", &test);
while (test) Solve(), --test;
return 0;
}
Luogu3307:[SDOI2013]项链的更多相关文章
- BZOJ3202 [Sdoi2013]项链
Problem E: [Sdoi2013]项链 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 427 Solved: 146[Submit][Sta ...
- bzoj 3202: [Sdoi2013]项链
Description 项链是人体的装饰品之一,是最早出现的首饰.项链除了具有装饰功能之外,有些项 链还具有特殊显示作用,如天主教徒的十字架链和佛教徒的念珠. 从古至今人们为了美化人体本身,也美 化环 ...
- bzoj3202:[Sdoi2013]项链
思路:首先考虑如何求珠子个数,一个珠子由a,b,c三个数组成且属于区间[1,a],并满足gcd(a,b,c)=1.由于要求本质相同,对于a,b,c这样的一个无序的数列且满足gcd(a,b,c)=1,设 ...
- 洛谷P3307 [SDOI2013]项链 [polya定理,莫比乌斯反演]
传送门 思路 很明显的一个思路:先搞出有多少种珠子,再求有多少种项链. 珠子 考虑这个式子: \[ S3=\sum_{i=1}^a \sum_{j=1}^a\sum_{k=1}^a [\gcd(i,j ...
- [SDOI2013]项链
description luogu 最近,铭铭迷恋上了一种项链.与其他珍珠项链基本上相同,不过这种项链的珠子却与众不同,是正三菱柱的泰山石雕刻而成的. 三菱柱的侧面是正方形构成的,上面刻有数字. 能够 ...
- 洛谷 P3307: bzoj 3202: [SDOI2013] 项链
题目传送门:洛谷P3307.这题在bzoj上是权限题. 题意简述: 这题分为两个部分: ① 有一些珠子,每个珠子可以看成一个无序三元组.三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠 ...
- bzoj 3202 [Sdoi2013]项链——容斥+置换+推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 可见Zinn博客:https://www.cnblogs.com/Zinn/p/100 ...
- 洛谷 P3307 - [SDOI2013]项链(Burnside 引理+数论)
题面传送门 看到题目我们显然可以将题目拆分成两部分:首先求出有多少个符合要求的珠子 \(c\),这样我们就可以将每种珠子看成一种颜色,题目也就等价于有多少种用 \(c\) 种颜色染长度为 \(n\) ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- oracle中表空间的相关操作
Oracle 创建表空间 注意点: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在,比如[E:\app\Quentin\oradata\orcl] ...
- 3.2 Multi-Master Replication
摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...
- leetcode-849-到最近的人的最大距离
题目描述: 在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的. 至少有一个空座位,且至少有一人坐在座位上. 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座 ...
- 有向图的拓扑排序的理解和简单实现(Java)
如果图中存在环(回路),那么该图不存在拓扑排序,在这里我们讨论的都是无环的有向图. 什么是拓扑排序 一个例子 对于一部电影的制作过程,我们可以看成是一个项目工程.所有的工程都可以分为若干个" ...
- 电信10兆指的是多少Mbps
一般电信10兆(10Mbps)指的是:下载速度最大在1.25MB/s 1Mbps(兆位/秒) = 0.125MB/S(兆字节/秒) 8Mbps(兆位/秒) = 1MB/ ...
- 【Three.js】如何选中外部模型
1.问题 three.js中模型选中使用的是射线法,根据摄像机角度,鼠标点击位置和模型选中的distance参数判断来选中模型.对于原生的矢量模型完全没有问题,但是当遇到导入的外部模型,如obj.st ...
- maven工程下testng简单使用
创建maven工程后,将Repository仓库中maven代码粘贴复制到pom.xml文件中,仓库地址:<!-- https://mvnrepository.com/artifact/org. ...
- (转)aix非计算内存 占用过高 案例一则
原文:http://www.talkwithtrend.com/Article/28621 两台小型机组成的RAC环境,在用topas查看资源使用情况时,发现一台机器的非计算内存占用过高: MEMOR ...
- JavaScript数据结构-16.二叉树计数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- CentOS6.4安装OpenSSL
1.下载 wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz 2.解压 tar zxf openssl-1.0.2h.tar.gz cd ...