原题链接

我天哪 大大的庆祝一下:

数论黑题 \(T1\) 达成!

激动地不行

记住套路:乱推 \(\gcd\),欧拉筛模板,然后乱换元,乱换式子,完了整除分块,欧拉筛和前缀和就解决了!

\[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=1}^p\gcd(i\cdot j,i\cdot k,j\cdot k)\times \gcd(i,j,k)\times \left(\frac{\gcd(i,j)}{\gcd(i,k)\times \gcd(j,k)}+\frac{\gcd(i,k)}{\gcd(i,j)\times \gcd(j,k)}+\frac{\gcd(j,k)}{\gcd(i,j)\times \gcd(i,k)}\right)
\]

\[= \sum_{i=1}^n \sum_{j=1}^m \sum_{k=1}^p \frac{\gcd(i,j) \times \gcd(i,k) \times \gcd(j,k)}{\gcd(i,j,k)} \times \gcd(i,j,k) \times \left(\frac{\gcd(i,j)}{\gcd(i,k)\times \gcd(j,k)}+\frac{\gcd(i,k)}{\gcd(i,j)\times \gcd(j,k)}+\frac{\gcd(j,k)}{\gcd(i,j)\times \gcd(i,k)}\right)
\]

\[= \sum_{i=1}^n \sum_{j=1}^m \sum_{k=1}^p \gcd(i,j)^2 + \gcd(i,k)^2 + \gcd(j,k)^2
\]

\[= p \times \sum_{i=1}^n \sum_{j=1}^m \gcd(i,j)^2 + m \times \sum_{i=1}^n \sum_{k=1}^p \gcd(i,k)^2 + n \times \sum_{j=1}^m \sum_{k=1}^p \gcd(j,k)^2
\]

下面我们只需考虑 \(\sum_{i=1}^n \sum_{j=1}^m \gcd(i,j)^2\)的值即可。

\[\sum_{i=1}^n \sum_{j=1}^m \gcd(i,j)^2
\]

\[= \sum_{d=1}^{\min(n,m)} d^2 \sum_{i=1}^n \sum_{j=1}^m [\gcd(i,j) == d]
\]

\[= \sum_{d=1}^{\min(n,m)} d^2 \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j) == 1]
\]

这里我们要知道 \(\sum_{i=1}^a \sum_{j=1}^b [\gcd(i,j) == 1]\).

然后开始莫比乌斯反演。

令:

\[f_x = \sum_{i=1}^a \sum_{j=1}^b [\gcd(i,j) == x]
\]

\[F_x = \sum_{i=1}^a \sum_{j=1}^b [x | \gcd(i,j)]
\]

显然有:

\[F_x = \sum_{x|d} f_d
\]

\[f_1 = \sum_{d=1} F_d \times \mu_d
\]

\[= \sum_{d=1}^{\min(n,m)} \mu_d \times \lfloor \frac{n}{d} \rfloor \times \lfloor \frac{m}{d} \rfloor
\]

回到原式:

\[= \sum_{d=1}^{\min(n,m)} d^2 \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j) == 1]
\]

\[= \sum_{d=1}^{\min(n,m)} d^2 \sum_{g=1}^{\min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)} \mu_d \lfloor \frac{n}{g \times d} \rfloor \lfloor \frac{m}{g \times d} \rfloor
\]

设 \(T = g \times d\) ,换 \(d|T\) 枚举。

\[= \sum_{T=1}^{\min(n,m)} \lfloor \frac{n}{T} \rfloor \times \lfloor \frac{m}{T} \rfloor \times \sum_{d|T} d^2 \mu{\lfloor \frac{T}{d} \rfloor}
\]

对于前面的,我们整除分块。

后面的,是个卷积,两个还都是积性函数,用欧拉筛一下。

(欧拉筛能解决所有的积性函数。如果不能,就再筛一遍。)

提醒一句:我们是要对 \(n\) , \(m\) ,\(p\) 求三次,不要只求一次啊。

突然感觉黑题也不怎难,会了套路就好

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll MOD=1e9+7;
const int N=2e7+1; inline ll read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
ll x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;} ll T,n,m,p,cnt=0; bool h[N];
ll prime[N],sum[N],f[N]; inline ll solve(ll n,ll m) {
ll ans=0;
for(ll i=1,t;i<=min(n,m);i=t+1) {
t=min(n/(n/i),m/(m/i));
ans=(ans+(n/i)*(m/i)%MOD*((sum[t]-sum[i-1]+MOD)%MOD)%MOD)%MOD;
} return ans;
} //整除分块 inline void Euler() {
f[1]=1;
for(ll i=2;i<N;i++) {
if(!f[i]) prime[++cnt]=i,f[i]=(i*i%MOD-1+MOD)%MOD;
for(ll j=1;j<=cnt && i*prime[j]<N;j++) {
f[i*prime[j]]=1;
if(i%prime[j]==0) {
f[i*prime[j]]=f[i]*prime[j]%MOD*prime[j]%MOD;
break;
} else f[i*prime[j]]=f[i]*f[prime[j]]%MOD;
}
}
for(ll i=1;i<N;i++) sum[i]=(sum[i-1]+f[i])%MOD;
} //欧拉筛,做前缀和 int main(){
Euler(); T=read(); while(T--) {
n=read(),m=read(),p=read();
printf("%lld\n",(p*solve(n,m)%MOD+m*solve(n,p)%MOD+n*solve(m,p)%MOD)%MOD);
} //别忘了3次轮换
return 0;
}

洛谷 P5176 公约数 题解的更多相关文章

  1. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  2. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  3. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  4. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

  5. [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解

    原题传送门 题目部分:(来自于考试题面,经整理) [题目描述] 小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品: 1.圆规,每个 7 元. 2.笔,每支 4 元. 3.笔记本,每本 ...

  6. [洛谷P3948]数据结构 题解(差分)

    [洛谷P3948]数据结构 Description 最开始的数组每个元素都是0 给出n,opt ,min,max,mod 在int范围内 A: L ,R ,X 表示把[l,R] 这个区间加上X(数组的 ...

  7. [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)

    [CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...

  8. 洛谷P1189 SEARCH 题解 迭代加深

    题目链接:https://www.luogu.com.cn/problem/P1189 题目大意: 给你一个 \(n \times m\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...

  9. 洛谷 P5221 Product 题解

    原题链接 庆祝!第二道数论紫题. 推式子真是太有趣了! \[\prod_{i=1}^n \prod_{j=1}^n \frac{\operatorname{lcm}(i,j)}{\gcd(i,j)} ...

随机推荐

  1. iOS适配UIViewView/WKWebView,H5生成长图,仿微信进度条

    前段时间撸代码猥琐发育的时候,设计师老王给了张截图某宝APP上一个生成长图分享的功能,正好公司有这个需求,于是在立马开始操练起来!在万能的度娘上搜集整理资料后发现很多文章介绍的方案对WKWebView ...

  2. Errors running builder JavaScript Validator

    问题: 解决方法: 方法一. 选择对应项目—-右键Properties—-Builders—-取消“JavaScript Validator”的勾就OK了 方法二. 找到“.project”文件,找到 ...

  3. 图示JVM工作原理

    JDK,JRE,JVM的联系是啥? JVM Java Virtual Machine JDK Java Development Kit JRE Java Runtime Environment 看上图 ...

  4. LeetCode~1033.移动石子直到连续

    1033.移动石子直到连续 三枚石子放置在数轴上,位置分别为 a,b,c. 每一回合,我们假设这三枚石子当前分别位于位置 x, y, z 且 x < y < z.从位置 x 或者是位置 z ...

  5. Unity中使用C#的null条件运算符?.的注意事项

    Introduction: 在C#6及以上版本中,加入了一项特别好用的运算符:Null条件运算符?.和?[]可以用来方便的执行判空操作,当运算符左侧操作数不为null时才会进行访问操作,否则直接返回n ...

  6. Context与ApplicationContext的区别

    ApplicationContext并没有这个类,其实更应该叫做:Activity与Application在作为Context时的区别.嗯,的确是这样的,大家在需要Context的时候,如果是在Act ...

  7. Python3——2019年全国大学生计算二级考试

    Python语言程序设计二级重点(2019年版) 第一章 程序设计基本方法 IPO程序编写方法 :输入(input),输出(output),处理(process): Python程序的特点: (1)语 ...

  8. 解决 Highcharts 中 yAxis 的 max 设置无效的问题

    问题场景 $(function () { Highcharts.chart('container', { title: { text: 'line' }, xAxis: { categories: [ ...

  9. 多图文,详细介绍mysql各个集群方案

    目录 多图文,详细介绍mysql各个集群方案 一,mysql原厂出品 二,mysql第三方优化 三,依托硬件配合 四,其它 多图文,详细介绍mysql各个集群方案 集群的好处 高可用性:故障检测及迁移 ...

  10. Lambda 语法

    1.java8 Lambda表达式语法简介 (此处需要使用jdk1.8或其以上版本) Lambd表达式分为左右两侧 * 左侧:Lambda 表达式的参数列表 * 右侧:Lambda 表达式中所需要执行 ...