题目传送门:洛谷P3307。这题在bzoj上是权限题。

题意简述:

这题分为两个部分:

① 有一些珠子,每个珠子可以看成一个无序三元组。三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠子不同当且仅当这个三元组不同。计算有多少种不同的珠子。

② 把这些珠子串成一个环,要满足相邻的珠子不同。两个环不同当且仅当旋转任意角度后仍然不同。计算有多少种不同的环。

题解:

分成两部分做。

第一部分:

考虑计算三元组的个数,转无序为有序,再去重。

答案=(三个都不同的有序三元组方案)/6+(两个相同,另一个不同的方案)/3+(三个都相同的方案)。

容斥一下得到答案=(三元组的方案+二元组的方案*3+一元组的方案*2)/6。

因为一元组只有(1)满足条件,所以答案是(2+三元组的方案+二元组的方案*3)/6。

考虑如何求出两种方案。

三元组的方案是\(\sum_{i=1}^m\sum_{j=1}^m\sum_{k=1}^m[\gcd(i,j,k)=1]\),二元组同理。

显然是莫反套路,三元组的答案是\(\sum_{d=1}^m\mu(d){\left\lfloor\frac{m}{d}\right\rfloor}^3\),二元组同理。

数论分块求出答案即可,最后乘上6的逆元。这一步复杂度$\Theta(m+T\sqrt{m})$。

第二部分:

知道了不同珠子的数量,要求出本质不同的环的个数。

Burnside引理套路。最终方案数等于每个置换的不动点个数的平均数,即\(\frac{1}{n}\sum_{i=1}^nf(i)\),\(f(i)\)表示旋转\(i\)格的不动点数量。

稍微化简一下:\(\frac{1}{n}\sum_{d|n}\varphi(\frac{n}{d})f(d)\)。

考虑计算\(f(x)\),当$x$是$n$的因数时,$f(x)$就等于不考虑旋转时的长度为$x$的环的数量。

假设不同珠子的数量为\(k\),不加证明地给出一个式子:\(f(x)=(k-1)^x+(-1)^x(k-1)\)。这个式子可以递推得出。

那么根据这个式子和上面的式子计算即可。

要注意\(n\)太大了,要求出\(\varphi\)的值比较困难,考虑DFS它的每个质因数,按照\(\varphi\)是个积性函数以及公式,求得\(\varphi\)。

要注意,最后除掉\(n\)的时候,\(n\)可能是模数的倍数导致没有逆元。可以发现\(n\)不会是模数平方的倍数,所以把模数平方后再做一遍,最后除掉模数这个因子即可。

 #include <cstdio>

 #define reg register
typedef unsigned long long ULL;
const ULL MOD = 1000000007ll;
const ULL Inv61 = 166666668ll;
const ULL Inv62 = 833333345000000041ll;
ULL Mod;
ULL Inv6;
const int MN = ; ULL TN[];
int TA[], MA; bool ip[MN];
int p[MN], pc;
int mu[MN];
inline void SieveInit() {
ip[] = ip[] = ;
mu[] = ;
for (reg int i = ; i <= MA; ++i) {
if (!ip[i])
p[++pc] = i,
mu[i] = -;
for (reg int j = ; j <= pc; ++j) {
reg int k = p[j] * i;
if (k > MA) break;
ip[k] = ;
if (i % p[j]) mu[k] = -mu[i];
else break;
}
}
for (reg int i = ; i <= MA; ++i)
mu[i] += mu[i - ];
} int O;
inline ULL Mul(ULL x, ULL y) {
if (!O) return x * y % Mod;
return (x * y - (ULL)((long double) x / Mod * y) * Mod + Mod) % Mod;
} ULL N; int A;
ULL M;
inline void SolveM() {
M = ;
for (reg int i = , j, k; i <= A; i = j + ) {
k = A / i, j = A / k;
M = (M + Mul(Mul(Mul(k, k), k + ), (mu[j] - mu[i - ] + Mod) % Mod)) % Mod;
}
M = Mul(M, Inv6);
} ULL Pow[];
inline void PowInit() {
Pow[] = M - ;
for (reg int i = ; i < ; ++i) Pow[i] = Mul(Pow[i - ], Pow[i - ]);
}
inline ULL qPow(ULL E) {
ULL A = ;
for (reg int j = ; E; E >>= , ++j)
if (E & ) A = Mul(A, Pow[j]);
return A;
}
inline ULL Inv(ULL B) {
ULL A = ;
for (reg ULL E = MOD - ; E; E >>= , B = B * B % MOD)
if (E & ) A = A * B % MOD;
return A;
} ULL b[]; int e[], cnt;
ULL Ans;
inline ULL F(ULL x) {
return (qPow(x) + (x & ? Mod - M + : M - )) % Mod;
}
void DFS(int st, ULL now, ULL phi) {
if (st > cnt) {
Ans = (Ans + Mul(phi % Mod, F(N / now))) % Mod;
return;
}
DFS(st + , now, phi);
for (reg int i = ; i <= e[st]; ++i) {
now *= b[st];
phi *= i == ? b[st] - : b[st];
DFS(st + , now, phi);
}
}
inline ULL Solve() {
ULL NN = N; cnt = ;
for (reg ULL i = ; i * i <= NN; ++i) if (NN % i == ) {
b[++cnt] = i, e[cnt] = ;
while (NN % i == ) NN /= i, ++e[cnt];
} if (NN > ) b[++cnt] = NN, e[cnt] = ;
Ans = ; DFS(, , );
if (O) Ans = Ans / MOD * Inv(N / MOD) % MOD;
else Ans = Ans * Inv(N % MOD) % MOD;
return Ans;
} int main() {
int Tests;
scanf("%d", &Tests);
for (int i = ; i <= Tests; ++i)
scanf("%llu%d", TN + i, TA + i),
MA = TA[i] > MA ? TA[i] : MA;
SieveInit();
for (int i = ; i <= Tests; ++i) {
N = TN[i], A = TA[i];
O = N % MOD ? : ;
if (O) Mod = MOD * MOD, Inv6 = Inv62;
else Mod = MOD, Inv6 = Inv61;
SolveM();
PowInit();
printf("%llu\n", Solve());
}
return ;
} // 1. 求出本质不同的珠子数量,容斥 + 莫比乌斯反演 + 数论分块
// 2. 求出答案,Burnside 引理 + 数论分块

洛谷 P3307: bzoj 3202: [SDOI2013] 项链的更多相关文章

  1. bzoj 3202: [Sdoi2013]项链

    Description 项链是人体的装饰品之一,是最早出现的首饰.项链除了具有装饰功能之外,有些项 链还具有特殊显示作用,如天主教徒的十字架链和佛教徒的念珠. 从古至今人们为了美化人体本身,也美 化环 ...

  2. bzoj 3202 [Sdoi2013]项链——容斥+置换+推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 可见Zinn博客:https://www.cnblogs.com/Zinn/p/100 ...

  3. 洛谷 P2056 BZOJ 2743 [HEOI2012]采花

    //表示真的更喜欢洛谷的题面 题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 ...

  4. 洛谷P1972 [SDOI2009]HH的项链 题解

    [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...

  5. 洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT

    题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...

  6. 洛谷 P3332 BZOJ 3110 [ZJOI2013]K大数查询

    题目链接 洛谷 bzoj 题解 整体二分 Code #include<bits/stdc++.h> #define LL long long #define RG register usi ...

  7. 洛谷 P2486 BZOJ 2243 [SDOI2011]染色

    题目描述 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221” ...

  8. 洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓

    题目描述 本题中,我们将用符号表示对c向下取整,例如:. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现在共有n只蚯蚓(n为正整数).每只 ...

  9. 洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑

    题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...

随机推荐

  1. SGU438_The Glorious Karlutka River =)

    好题,有一些人在河的一边,想通过河里的某些点跳到对岸去.每个点最多只能承受一定数量的人,每人跳跃一次需要消耗一个时间.求所有人都过河的最短时间. 看网上说是用了什么动态流的神奇东东.其实就是最大流吧, ...

  2. PGM学习之三 朴素贝叶斯分类器(Naive Bayes Classifier)

    介绍朴素贝叶斯分类器的文章已经很多了.本文的目的是通过基本概念和微小实例的复述,巩固对于朴素贝叶斯分类器的理解. 一 朴素贝叶斯分类器基础回顾 朴素贝叶斯分类器基于贝叶斯定义,特别适用于输入数据维数较 ...

  3. 【题解】洛谷P4707重返现世

    在跨年的晚上玩手机被妈妈骂了赶来写题……呜呜呜……但是A题了还是很开心啦,起码没有把去年的题目留到明年去做ヾ(◍°∇°◍)ノ゙也祝大家2019快乐! 这题显然的 kth min-max 容斥就不说了, ...

  4. 【比赛】NOIP2017 宝藏

    这道题考试的时候就骗了部分分.其实一眼看过去,n范围12,就知道是状压,但是不知道怎么状压,想了5分钟想不出来就枪毙了状压,与AC再见了. 现在写的是状压搜索,其实算是哈希搜索,感觉状压DP理解不了啊 ...

  5. 【Cf #502 F】The Neutral Zone

    本题把$log$化简之后求得就是每个质数$f$前的系数,求系数并不难,难点在于求出所有的质数. 由于空间限制相当苛刻,$3e8$的$bitset$的内存超限,我们考虑所有的除了$2$和$3$以外的质数 ...

  6. 洛谷 P1446 [HNOI2008]Cards 解题报告

    P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...

  7. 【bzoj2876】 Noi2012—骑行川藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=2876 (题目链接) 题意 在满足约束条件$${\sum_{i=1}^ns_ik_i(v_i-v_i' ...

  8. Linux及安全实践四——ELF文件格式分析

    Linux及安全实践四——ELF文件格式分析 一.ELF文件格式概述 1. ELF:是一种对象文件的格式,用于定义不同类型的对象文件中都放了什么东西.以及都以什么样的格式去放这些东西. 二.分析一个E ...

  9. response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别

    转发方式:request.getRequestDispatcher().forward(); 重定向方式:response.sendRedirect();  下面是HttpServletRespons ...

  10. 简单版AC自动机

    简单版\(AC\)自动机 学之前听别人说起一直以为很难,今天学了简单版的\(AC\)自动机,感觉海星,只要理解了\(KMP\)一切都好说. 前置知识:\(KMP\)(有链接) 前置知识:\(Trie\ ...