Solution -「CF645F」Cowslip Collections
设 \(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}\)。
可以莫反对吧。
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的更多相关文章
- Solution -「构造」专练
记录全思路过程和正解分析.全思路过程很 navie,不过很下饭不是嘛.会持续更新的(应该). 「CF1521E」Nastia and a Beautiful Matrix Thought. 要把所有数 ...
- Solution -「原创」Destiny
题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...
- Solution -「GLR-R2」教材运送
\(\mathcal{Description}\) Link. 给定一棵包含 \(n\) 个点,有点权和边权的树.设当前位置 \(s\)(初始时 \(s=1\)),每次在 \(n\) 个结点内 ...
- Solution -「WF2011」「BZOJ #3963」MachineWorks
\(\mathcal{Description}\) Link. 给定你初始拥有的钱数 \(C\) 以及 \(N\) 台机器的属性,第 \(i\) 台有属性 \((d_i,p_i,r_i,g_i ...
- Solution -「LOCAL」二进制的世界
\(\mathcal{Description}\) OurOJ. 给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...
- Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡
\(\mathcal{Description}\) link. 有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...
- Solution -「LOCAL」大括号树
\(\mathcal{Description}\) OurTeam & OurOJ. 给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...
- Solution -「ZJOI2012」「洛谷 P2597」灾难
\(\mathcal{Description}\) link. 给定一个捕食网络,对于每个物种,求其灭绝后有多少消费者失去所有食物来源.(一些名词与生物学的定义相同 w.) 原图结点数 \ ...
- Solution -「JSOI2008」「洛谷 P4208」最小生成树计数
\(\mathcal{Description}\) link. 给定带权简单无向图,求其最小生成树个数. 顶点数 \(n\le10^2\),边数 \(m\le10^3\),相同边权的边数不 ...
随机推荐
- HashMap中红黑树插入节点的调整过程
如果有对红黑树的定义及调整过程有过研究,其实很容易理解HashMap中的红黑树插入节点的调整过程. "红黑树定义及调整过程"的参考文章:<红黑树原理.查找效率.插入及变化规则 ...
- CentOS 8及以上版本配置IP的方法,你 get 了吗
接上篇文章讲了 Ubuntu 18及以上版本的配置方法,本文再来讲讲 CentOS 8 及以上版本配置 IP 的方法. Centos/Redhat(8.x) 配置 IP 方法 说明:CentOS 8 ...
- 归约与分组 - 读《Java 8实战》
区分Collection,Collector和collect 代码中用到的类与方法用红框标出,可从git库中查看 收集器用作高级归约 // 按货币对交易进行分组 Map<Currency, Li ...
- 561. Array Partition I - LeetCode
Question 561. Array Partition I Solution 题目大意是,给的数组大小是2n,把数组分成n组,每组2个元素,每个组取最小值,这样就能得到n个值,怎样分组才能使这n个 ...
- 152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv
152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv 附件下载地址:https://jiaopengzi.com/2602.html 一.背景 在我们使用 ...
- Python <算法思想集结>之初窥基础算法
1. 前言 数据结构和算法是程序的 2 大基础结构,如果说数据是程序的汽油,算法则就是程序的发动机. 什么是数据结构? 指数据在计算机中的存储方式,数据的存储方式会影响到获取数据的便利性. 现实生活中 ...
- 「洛谷 P3834」「模板」可持久化线段树 题解报告
题目描述 给定n个整数构成的序列,将对于指定的闭区间查询其区间内的第k小值. 输入输出格式 输入格式 第一行包含两个正整数n,m,分别表示序列的长度和查询的个数. 第二行包含n个整数,表示这个序列各项 ...
- 【clickhouse专栏】clickhouse性能为何如此卓越
在<clickhouse专栏>上一篇文章中<数据库.数据仓库之间的区别与联系>,我们介绍了什么是数据库,什么是数据仓库,二者的区别联系.clickhouse的定位是" ...
- NetCore框架WTM的分表分库实现
介绍 本期主角: ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵 WTM WalkingTec.Mvvm框架(简称W ...
- JavaScript之创建八个对象过520
马上又到了一年一度的520了,程序猿们赶紧创建对象过520吧!!! JavaScript创建对象的几种方式: 一:字面量方式: var obj = {name: '程序猿'}; 二:通过new操作符: ...