设 \(f(i)\) 表示大小为 \(k\),\(\gcd\) 为 \(i\) 的方案数。\(F(i)\) 表示大小为 \(k\),\(\gcd\) 为 \(i\) 的倍数的方案数。

不难看出:\(F(i) = \sum \limits _{i | d} f(d)\)。同时记 \(w_i\) 为数列中 \(i\) 的倍数的个数,则 \(F(i) = \dbinom {w_i} {k}\)。

可以莫反对吧。

\[\begin {align}
f (i) &= \sum _{i | d} F(d) \mu(\frac {d} {i})
\\
\mathrm{Ans} &= \sum _{i = 1} ^{k} i \times f(i) = \sum _{i = 1} ^{k} i \sum _{i | d}\mu (\frac {d} {i}) \times \dbinom {w_d} {k}
\end {align}
\]

有插入操作,不难发现每加入一个数只会让若干个 \(w_x\) 加上 \(1\)。

注意到这部分的贡献,应该为 \(a \times b\),其中 \(a = \dbinom {w_x + 1} {k} - \dbinom {w_x} {k}\),而 \(b = \sum \limits _{i | x} i \times \mu ({\frac {x} {i}})\)。

而 \(b\) 可以看出是 \(\mu\) 和 \(\mathrm{Id}\) 的卷积,也就是 \(\varphi\) ,可以线性筛预处理。

#include <cstdio>

typedef long long LL;
int Abs (int x) { return x < 0 ? -x : x; }
int Max (int x, int y) { return x > y ? x : y; }
int Min (int x, int y) { return x < y ? x : y; } int Read () {
int x = 0, k = 1;
char s = getchar ();
while (s < '0' || s > '9') {
if (s == '-')
k = -1;
s = getchar ();
}
while ('0' <= s && s <= '9')
x = (x << 3) + (x << 1) + (s ^ 48), s = getchar ();
return x * k;
} void Write (int x) {
if (x < 0)
putchar ('-'), x = -x;
if (x > 9)
Write (x / 10);
putchar (x % 10 + '0');
} void Print (int x, char s) { Write (x), putchar (s); } const int Mod = 1e9 + 7;
const int Maxn = 1e6 + 5; bool Flag[Maxn];
int Num[Maxn], Inv[Maxn], Fac[Maxn], Phi[Maxn], Cnt[Maxn], Len = 0; int C (int n, int m) { return n < m ? 0 : (LL)Fac[n] * Inv[n - m] % Mod * Inv[m] % Mod; } void Init () {
Flag[1] = true, Phi[1] = 1;
for (int i = 2; i < Maxn; i++) {
if (!Flag[i])
Num[++Len] = i, Phi[i] = i - 1;
for (int j = 1; j <= Len; j++) {
if (i * Num[j] >= Maxn)
break;
Flag[i * Num[j]] = true;
if (i % Num[j] == 0) {
Phi[i * Num[j]] = Phi[i] * Num[j];
break;
}
Phi[i * Num[j]] = Phi[i] * Phi[Num[j]];
}
}
Inv[1] = 1;
for (int i = 2; i < Maxn; i++)
Inv[i] = (LL)(Mod - Mod / i) * Inv[Mod % i] % Mod;
Fac[0] = 1, Inv[0] = 1;
for (int i = 1; i < Maxn; i++) {
Fac[i] = (LL)Fac[i - 1] * i % Mod;
Inv[i] = (LL)Inv[i - 1] * Inv[i] % Mod;
}
} int main () {
Init ();
int n = Read (), k = Read (), q = Read (), Res = 0;
for (int i = 1, x; i <= n; i++) {
x = Read ();
for (int j = 1; j * j <= x; j++) {
if (x % j)
continue;
Cnt[j]++, Res = (Res + (LL)Phi[j] * (C (Cnt[j], k) - C (Cnt[j] - 1, k) + Mod) % Mod) % Mod;
if (j * j != x)
Cnt[x / j]++, Res = (Res + (LL)Phi[x / j] * (C (Cnt[x / j], k) - C (Cnt[x / j] - 1, k) + Mod) % Mod) % Mod;
}
}
for (int i = 1, x; i <= q; i++) {
x = Read ();
for (int j = 1; j * j <= x; j++) {
if (x % j)
continue;
Cnt[j]++, Res = (Res + (LL)Phi[j] * (C (Cnt[j], k) - C (Cnt[j] - 1, k) + Mod) % Mod) % Mod;
if (j * j != x)
Cnt[x / j]++, Res = (Res + (LL)Phi[x / j] * (C (Cnt[x / j], k) - C (Cnt[x / j] - 1, k) + Mod) % Mod) % Mod;
}
Print (Res, '\n');
}
return 0;
}

Solution -「CF645F」Cowslip Collections的更多相关文章

  1. Solution -「构造」专练

    记录全思路过程和正解分析.全思路过程很 navie,不过很下饭不是嘛.会持续更新的(应该). 「CF1521E」Nastia and a Beautiful Matrix Thought. 要把所有数 ...

  2. Solution -「原创」Destiny

    题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...

  3. Solution -「GLR-R2」教材运送

    \(\mathcal{Description}\)   Link.   给定一棵包含 \(n\) 个点,有点权和边权的树.设当前位置 \(s\)(初始时 \(s=1\)),每次在 \(n\) 个结点内 ...

  4. Solution -「WF2011」「BZOJ #3963」MachineWorks

    \(\mathcal{Description}\)   Link.   给定你初始拥有的钱数 \(C\) 以及 \(N\) 台机器的属性,第 \(i\) 台有属性 \((d_i,p_i,r_i,g_i ...

  5. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...

  6. Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡

    \(\mathcal{Description}\)   link.   有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...

  7. Solution -「LOCAL」大括号树

    \(\mathcal{Description}\)   OurTeam & OurOJ.   给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...

  8. Solution -「ZJOI2012」「洛谷 P2597」灾难

    \(\mathcal{Description}\)   link.   给定一个捕食网络,对于每个物种,求其灭绝后有多少消费者失去所有食物来源.(一些名词与生物学的定义相同 w.)   原图结点数 \ ...

  9. Solution -「JSOI2008」「洛谷 P4208」最小生成树计数

    \(\mathcal{Description}\)   link.   给定带权简单无向图,求其最小生成树个数.   顶点数 \(n\le10^2\),边数 \(m\le10^3\),相同边权的边数不 ...

随机推荐

  1. [没接触过kubevirt?]15分钟快速入门kubevirt

    @ 目录 本文介绍 前言 环境准备 详细版 搭建步骤 安装KubeVirt 安装virtctl客户端工具 创建VirtualMachine 启动VirtualMachineInstance 启动和停止 ...

  2. 交换机POE技术知识大全

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 一个典型的以太网供电系统,在配线柜里保留以太网交换机设备,用一个带电源供电集线器(Midspan HUB)给局域网的双绞线提 ...

  3. 深度好文:Linux系统内存知识

    点击关注上方"开源Linux", 后台回复"读书",有我为您特别筛选书籍资料~ 相关阅读: 深度好文:Linux文件系统剖析 Linux 内存是后台开发人员,需 ...

  4. 【原创】ShellCode免杀的骚姿势

    ShellCode免杀的骚姿势 常见的免杀手法: shellcode(攻击代码)和加载程序的分离: Lolbins白利用加载shellcode(白名单利用): shellcode混淆.编码解码: sh ...

  5. Mac下最好用的SSH连接客户端 (Termius)

    Termius是微软的一款SSH终端工具,它支持多平台.而且操作界面十分ha好看且简洁,今天分享给大家️ 软件下载 关注下方公众号,回复termius获取下载地址   软件功能介绍 Termius M ...

  6. VSCode进一步深入了解学习

    紧接上一章节趁热打铁吧,未关注博主的记得关注哦! VSCode设置 (1)关闭预览模式 我们在 VScode 上打开一个新文件的话会覆盖掉以前的文件,这是因为 VSCode 默认开启了预览模式,预览模 ...

  7. 不忍了,快速下载Visual Studio Code

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年5月2日. 奇怪的原因 因为一些众所周知的原因,在国内下载Visual Studio Code的速度比较慢,所以我们需要一些方法来加快 ...

  8. [自制操作系统] 第04回 完善MBR

    目录 一.前景回顾 二.改写MBR 三.实现loader 一.前景回顾 在之前我们说到,MBR的作用便是加载操作系统内核到指定位置.而MBR需要通过读取硬盘来获得操作系统内核.在上一回我们已经讲解了硬 ...

  9. springboot整合ueditor实现图片上传和文件上传功能

    springboot整合ueditor实现图片上传和文件上传功能 写在前面: 在阅读本篇之前,请先按照我的这篇随笔完成对ueditor的前期配置工作: springboot+layui 整合百度富文本 ...

  10. 1.为什么要从古典概率入门概率学《zobol的考研概率论教程》

    在入门概率论与数理统计这门课中,刚开始我们都会从古典概率开始学习,为什么要选择它呢?这是因为古典概率作为一种将生活中的事情简化为有限种情况,并假设它们的发生可能差不多的手段,十分的好用且简洁. 这里我 ...