\(\mathcal{Description}\)

  Link.

  给定 \(\{a_n\}\),求:

\[\sum_{i=1}^n\sum_{j=1}^n\operatorname{lcm}(a_i,a_j)
\]

  \(1\le n,a_i\le5\times10^4\)。

\(\mathcal{Solution}\)

  数论题在序列上搞不太现实,记最大值 \(m\),有 \(c_i\) 个 \(a_j=i\),推式子:

\[\begin{aligned}
\sum_{i=1}^n\sum_{j=1}^n\operatorname{lcm}(a_i,a_j)&=\sum_{i=1}^m\sum_{j=1}^m\frac{ij}{\gcd(i,j)}c_ic_j\\
&=\sum_{d=1}^m\sum_{i=1}^{\lfloor\frac{m}d\rfloor}\sum_{j=1}^{\lfloor\frac{m}d\rfloor}[\gcd(i,j)=1]dijc_ic_j\\
&=\sum_{d=1}^m\sum_{i=1}^{\lfloor\frac{m}d\rfloor}\sum_{j=1}^{\lfloor\frac{m}d\rfloor}dijc_ic_j\sum_{D|i\land D|j}\mu(D)~~~~(\text{Mobius 反演})\\
&=\sum_{d=1}^md\sum_{D=1}^{\lfloor\frac{m}d\rfloor}\mu(D)D^2\sum_{i=1}^{\lfloor\frac{m}{dD}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dD}\rfloor}ijc_{idD}c_{jdD}~~~~(\text{交换枚举顺序})\\
&=\sum_{T=1}^mT\sum_{D|T}\mu(D)D\sum_{i=1}^{\lfloor\frac{m}T\rfloor}\sum_{j=1}^{\lfloor\frac{m}T\rfloor}ijc_{iT}c_{jT}~~~~(\text{改换枚举}~T=dD)\\
&=\sum_{T=1}^mT\left(\sum_{i=1}^{\lfloor\frac{m}T\rfloor}ic_{iT}\right)^2\sum_{D|T}\mu(D)D
\end{aligned}
\]

  \(\mathcal O(n+m\sqrt m)\) 算就好啦。

\(\mathcal{Code}\)

#include <cmath>
#include <cstdio> const int MAXN = 5e4;
int n, m, c[MAXN + 5];
int pn, pr[MAXN + 5], mu[MAXN + 5];
bool vis[MAXN + 5]; inline int rint () {
int x = 0; char s = getchar ();
for ( ; s < '0' || '9' < s; s = getchar () );
for ( ; '0' <= s && s <= '9'; s = getchar () ) x = x * 10 + ( s ^ '0' );
return x;
} inline void sieve ( const int n ) {
mu[1] = 1;
for ( int i = 2; i <= n; ++ i ) {
if ( !vis[i] ) mu[pr[++ pn] = i] = -1;
for ( int j = 1, t; j <= pn && ( t = i * pr[j] ) <= n; ++ j ) {
vis[t] = true;
if ( !( i % pr[j] ) ) break;
mu[t] = -mu[i];
}
}
} int main () {
n = rint ();
for ( int i = 1, a; i <= n; ++ i ) {
++ c[a = rint ()];
if ( m < a ) m = a;
}
sieve ( m );
long long ans = 0;
for ( int i = 1; i <= m; ++ i ) {
long long a = 0, b = 0;
for ( int j = 1, t = m / i; j <= t; ++ j ) a += 1ll * j * c[i * j];
for ( int j = 1, t = sqrt ( i ); j <= t; ++ j ) {
if ( i % j ) continue;
b += mu[j] * j;
if ( j * j < i ) b += mu[i / j] * i / j;
}
ans += 1ll * i * a * a * b;
}
printf ( "%lld\n", ans );
return 0;
}

\(\mathcal{Details}\)

  推的时候把 \(ij\) 系数搞丢了自闭半天 qaq。

Solution -「洛谷 P3911」最小公倍数之和的更多相关文章

  1. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  2. Note/Solution -「洛谷 P5158」「模板」多项式快速插值

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...

  3. Solution -「洛谷 P5236」「模板」静态仙人掌

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的仙人掌,\(q\) 组询问两点最短路.   \(n,q\le10^4\),\(m\ ...

  4. Solution -「洛谷 P4198」楼房重建

    \(\mathcal{Description}\)   Link.   给定点集 \(\{P_n\}\),\(P_i=(i,h_i)\),\(m\) 次修改,每次修改某个 \(h_i\),在每次修改后 ...

  5. Solution -「洛谷 P6577」「模板」二分图最大权完美匹配

    \(\mathcal{Description}\)   Link.   给定二分图 \(G=(V=X\cup Y,E)\),\(|X|=|Y|=n\),边 \((u,v)\in E\) 有权 \(w( ...

  6. Solution -「洛谷 P6021」洪水

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...

  7. Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集.   \(n,m\le10^5 ...

  8. Solution -「洛谷 P4320」道路相遇

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),询问 \(u\) 到 ...

  9. Solution -「洛谷 P5827」边双连通图计数

    \(\mathcal{Description}\)   link.   求包含 \(n\) 个点的边双连通图的个数.   \(n\le10^5\). \(\mathcal{Solution}\)    ...

随机推荐

  1. SQL高级优化(五)之执行计划

    一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如 ...

  2. HDU 2044 一只小蜜蜂... (斐波那契数列)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2044 题目分析:其实仔细读题就会发现其中的规律, 其中:这是一个典型的斐波那契数列. 代码如下: #i ...

  3. 最完整的springboot2.2.x.RELEASE整合springDataElasticsearch 7.6.2

    本文使用内容    springBoot2.2.5.RELEASE版本   Elasticsearch7.6.2  linux版本的   SpringDataElasticSearch与Springb ...

  4. 【机器学习】HMM

    机器学习算法-HMM 目录 机器学习算法-HMM 1. 模型定义 2. 序列生成 3. 概率计算 3.1 前向计算 3.2 后向计算 4. 学习 4.1 求解 4.2 求解 4.3 求解 5. 预测 ...

  5. 【刷题-PAT】A1126 Eulerian Path (25 分)

    1126 Eulerian Path (25 分) In graph theory, an Eulerian path is a path in a graph which visits every ...

  6. 【刷题-PAT】A1114 Family Property (25 分)

    1114 Family Property (25 分) This time, you are supposed to help us collect the data for family-owned ...

  7. 适配器模式(Adapter模式)

    模式的定义与特点 适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作.适配器模式分为类结构型模式和对象结构型模式 ...

  8. golang中的rpc开发

    golang中实现RPC非常简单,官方提供了封装好的库,还有一些第三方的库 golang官方的net/rpc库使用encoding/gob进行编解码,支持tcp和http数据传输方式,由于其他语言不支 ...

  9. WPS修改批注部分的字体颜色?

    今天遇到一个问题,就是复制文档的时候有几块红色字体想改成黑色,怎么也改不成功,通过修改字体颜色无效,通过百度找到了解决方法记录一下. 解决方法 审阅--显示标记--点击插入和删除(去掉前面的对钩即可) ...

  10. NGINX的动静分离;什么是负载均衡

    目录 一:动静分离 二:负载均衡 一:动静分离 动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护 ...