A. 最小公倍树

时间限制: 1.0 秒

空间限制: 512 MiB

相关文件: 题目目录

题目背景

听说有人嫌题面描述都太长了。

题目描述

对于任意 $V\subset\mathbb{N}^*$,$|V|<+\infty$,构造一张无向完全图 $G=(V,E)$,其中 $(u, v)$ 的边权为 $u,v$ 的最小公倍数 $\mathrm{lcm}(u, v)$。称 $G$ 的最小生成树为 $V$ 的最小公倍树(LCT, Lowest Common Tree)。

现在给出 $L, R$,请你求出 $V={L, L+1, \cdots, R}$ 的最小公倍树 $LCT(V)$。

输入格式

从标准输入读入数据。

输入仅一行,包括两个正整数 $L, R$。

输出格式

输出到标准输出。

输出一个正整数,表示 $LCT(V)$ 的边权和。

样例1输入

1
3 12

样例1输出

1
126

样例2输入

1
6022 14076

样例2输出

1
66140507445

样例3输入

1
13063 77883

样例3输出

1
3692727018161

样例4输入

1
325735 425533

样例4输出

1
1483175252352926

子任务

对于 $100%$ 的数据,保证 $1\le L\le R\le 10^6$,且 $R-L\le 10^5$。


可以直观感受到这个东西肯定和因数和倍数有关系,我们考虑对于这个东西进行考虑。

发现 $R - L \le 10^5$ 那么可以带 $\log $,我们考虑对于区间范围内的所有数考虑其因子会产生的贡献,对于相同的因子进行连边,但是发现这里的边数还是平方级别的,我们尝试使用 $\tt prim$ 进行更新,也就是我们需要快速找到和已知集合连边的最小边权。

考虑加入一个点 $x$ 加入之后的贡献,我们考虑其所有的因子,进行更新集合内是当前因子倍数的最小值,集合外同理。考虑集合内部开桶,集合外因为会修改直接开链表即可,同时更新一下涉及因子的 $\tt lcm$,之后考虑直接线段树暴力维护全局 $\tt lcm$ 最小值,复杂度是 $O(n \sqrt n \log n)$,其中 $n = 10^5$ 差不多能过。


$\tt Update$:

事实上复杂度其实完全不用那么高,我之前复杂度比较高的原因主要是在于因子的复杂度,然而我们可以考虑将质因子全部拿出来之后再进行 $\tt dfs$ 组合,这样复杂度就是 $O(\log n)$ 的。

加上我们的数据结构维护复杂度可以做到 $O(n \log^2 n )$。