「luogu - P3911」最小公倍数之和
Denote \(cnt_{x}\) = the number of occurrences of \(x\), \(h\) = the maximum of \(a_i\), there we get
\begin{aligned}
&=\sum_{1\leqslant d\leqslant h}\sum_{1\leqslant i\leqslant h}\sum_{1\leqslant j\leqslant h}[\left(i,j\right)=d]\times\frac{i\times j\times cnt_i\times cnt_j}{d} \\
&=\sum_{1\leqslant d\leqslant h}d\sum_{1\leqslant i\leqslant\lfloor\frac{h}{d}\rfloor}\sum_{1\leqslant j\leqslant\lfloor\frac{h}{d}\rfloor}\sum_{k\mid\left(i,j\right)}\mu\left(k\right)\times i\times j\times cnt_{id}\times cnt_{jd} \\
&=\sum_{1\leqslant d\leqslant h}d\sum_{1\leqslant k\leqslant\lfloor\frac{h}{d}\rfloor}\mu\left(k\right)\times k^2\sum_{1\leqslant i\leqslant\lfloor\frac{h}{dk}\rfloor}\sum_{1\leqslant j\leqslant\lfloor\frac{h}{dk}\rfloor}i\times j\times cnt_{idk}\times cnt_{jdk} \\
&=\sum_{1\leqslant T\leqslant h}T\sum_{k\mid T}\mu\left(k\right)\times k\sum_{1\leqslant i\leqslant \lfloor\frac{h}{T}\rfloor}i\times cnt_{iT}\sum_{1\leqslant j\leqslant \lfloor\frac{h}{T}\rfloor}j\times cnt_{jT} \\
\end{aligned}
\]
Denote \(\displaystyle f(T)=\sum_{1\leqslant i\leqslant h/T}i\times cnt_{iT}\), \(\displaystyle g(T)=\sum_{1\leqslant i\leqslant h/T}i\times cnt_{iT}\times f(T)\)
\begin{aligned}
&=\sum_{1\leqslant T\leqslant h}T\sum_{k\mid T}\mu\left(k\right)\times k\times g\left(T\right)
\end{aligned}
\]
Denote \(\displaystyle z(T)=T\sum_{k\mid T}\mu(k)\times k\), the answer would be \(\displaystyle\sum_{1\leqslant i\leqslant h}z(i)\times g(i)\).
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define cmin(x, y) x = min(x, y)
#define cmax(x, y) x = max(x, y)
#define fors(i, l, r, ...) for(int i = (l), REP##i = (r), ##__VA_ARGS__; i <= REP##i; ++i)
#define dfors(i, r, l, ...) for(int i = (r), REP##i = (l), ##__VA_ARGS__; i >= REP##i; --i)
signed main() {
ios::sync_with_stdio(0), cin.tie(0);
int n;
cin >> n;
vector<int> a(n);
for(int& x : a) cin >> x;
const int h = *max_element(a.begin(), a.end());
vector<int> cnt(h+1);
for(const int x : a) cnt[x]++;
const auto z = [](const int n) {
vector<int> mu(n+1), prime, not_prime(n+1);
vector<ll> z(n+1);
mu[1] = 1;
fors(i, 2, n) {
if(not_prime[i] == 0) prime.emplace_back(i),mu[i] = -1;
for(const int p : prime) {
if(i > n/p) break;
not_prime[i*p] = 1;
if(i%p == 0) break;
mu[i*p] = -mu[i];
}
}
fors(d, 1, n) {
for(int T = d; T <= n; T += d) z[T] += ll(mu[d])*d;
}
return z;
}(h);
ll ans = 0;
fors(i, 1, h) {
ll tmp = 0;
fors(j, 1, h/i) tmp += ll(cnt[i*j])*j;
ans += tmp*tmp*z[i]*i;
}
cout << ans << "\n";
return 0;
}
「luogu - P3911」最小公倍数之和的更多相关文章
- Solution -「洛谷 P3911」最小公倍数之和
\(\mathcal{Description}\) Link. 给定 \(\{a_n\}\),求: \[\sum_{i=1}^n\sum_{j=1}^n\operatorname{lcm}(a ...
- 「 Luogu P1231 」 教辅的组成
题目大意 有 $\text{N1}$ 本书 $\text{N2}$本练习册 $\text{N3}$本答案,一本书只能和一本练习册和一本答案配对.给你一些书和练习册,书和答案的可能的配对关系.问你最多可 ...
- 「Luogu 1821」[USACO07FEB]银牛派对Silver Cow Party
更好的阅读体验 Portal Portal1: Luogu Portal2: POJ Description One cow from each of N farms \((1 \le N \le 1 ...
- 「 Luogu P1122 」 最大子树和
# 题目大意 真讨厌题面写的老长老长的. 这个题的意思就是给定一棵无根树,每个节点都有一个美丽值(可能是负数),可以删掉一些边来删除某些点,现在要求你求出可以删掉任意条边的情况下,这个树上的剩余节点的 ...
- 「Luogu 1525」关押罪犯
更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description \(S\)城现有两座监狱,一共关押着\(N\)名罪犯,编号分别为\(1 - N\) ...
- 「Luogu 2367」语文成绩
更好的阅读体验 Portal Portal1: Luogu Description 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行.她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少 ...
- 「Luogu 1349」广义斐波那契数列
更好的阅读体验 Portal Portal1: Luogu Description 广义的斐波那契数列是指形如\(an=p \times a_{n-1}+q \times a_{n-2}\)的数列.今 ...
- 「Luogu 3792」由乃与大母神原型和偶像崇拜
更好的阅读体验 Portal Portal1: Luogu Description 给你一个序列\(a\) 每次两个操作: 修改\(x\)位置的值为\(y\): 查询区间\([l, r]\)是否可以重 ...
- 「Luogu P3866」[TJOI2009]战争游戏 解题报告
题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 ...
- 「Luogu P2201」数列编辑器 解题报告
数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我
随机推荐
- JeeCms低代码开发平台了解及认知以及遇到的问题
1.jeecms低代码开发平台自带标签,使用的标签延续freemarker标签或基于freemarker标签自定的标签(类似自jsp自定义标签) (1)什么是freemarker标签: FreeMar ...
- HttpURLConnection调用webservice,c#、java、python等HTTP调用webservice,简单的webservice调用
以前调用webservice一般使用axis.axis2先生成java类后,直接引用,多方便.但是有的webservice接口非常的函数,生成的java类非常多,有没有一种非常简化的方法. axis2 ...
- 20.AQS家族的“外门弟子”:CyclicBarrier
关注王有志,一个分享硬核Java技术的互金摸鱼侠 欢迎你加入Java人的提桶跑路群:共同富裕的Java人 今天我们来学习AQS家族的"外门弟子":CyclicBarrier. 为什 ...
- GPT3的性能评估:比较不同语言、文本和任务的差异
目录 GPT-3 性能评估:比较不同语言.文本和任务的差异 近年来,自然语言处理 (NLP) 和人工智能领域取得了巨大的进展,其中 GPT-3 是目前最为先进的语言模型之一.GPT-3 拥有超过 17 ...
- Java 数组及数组的优点与缺点
1.java中的数组是一种引用数据类型.不属于基本数据类型.数组的父类是Object. 2.数组实际上是一个容器,可以同时容纳多个元素.(数组相当于是一个数据的集合.) 数组的字面意思是"一 ...
- Java 使用maven模板创建web项目慢的解决方法
创建的时候在这里加上这个,使用本地仓库创建. 快捷粘贴↓↓↓ archetypeCatalog local
- 知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等
知识图谱之<海贼王-ONEPICE>领域图谱项目实战(含码源):数据采集.知识存储.知识抽取.知识计算.知识应用.图谱可视化.问答系统(KBQA)等 实体关系可视化页面可视化页面尝鲜 1. ...
- vue报错解决Duplicate keys detected: ‘[object Object]’
最近在做vue项目时遇到了报错 Duplicate keys detected: '[object Object]'. This may cause an update error. 由于这个 ...
- 一文了解io包中的discard类型
1. 引言 io.discard是Go语言标准库提供一个结构体类型,其在丢弃不需要的数据场景下非常好用.本文我们将从io.discard 类型的基本定义出发,讲述其基本使用和实现原理,接着简单描述 i ...
- 如何给Github上的开源项目提交PR?
前言 对于一个热爱开源的程序员而言,学会给GitHub上的开源项目提交PR这是迈出开源的第一步.今天我们就来说说如何向GitHub的开源项目提交PR,当然你提交的PR可以是一个项目的需求迭代.也可以是 ...