传送门


好像是我们联考时候的题目?

一个结论:\(\gcd(ij,ik,jk) \times \gcd(i,j,k) = \gcd(i,j) \times \gcd(i,k) \times \gcd(j,k)\),证明:由于\(\gcd\)是积性函数,所以我们分成每个质因子考虑。假设对于质数\(p\),\(i,j,k\)的素数唯一分解中\(p\)的质数为\(a \geq b \geq c\),那么如果只考虑\(p\)这一个质因子,\(\gcd(ij,ik,jk) = p^{b+c} , \gcd(i,j,k) = p^c , \gcd(i,j) = p^b , \gcd(i,k) = p^c , \gcd(j,k) = p^c\),那么两边的乘积都是\(p^{b+2c}\)。

那么稍微化简一下,原式就等于\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m \sum\limits_{k=1}^p \gcd(i,j)^2 + \gcd(i,k)^2 + \gcd(j,k)^2 = pf(n,m)+mf(n,p)+nf(m,p)\),其中\(f(n,m) = \sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^2\)

接下来求\(f(n,m)\)(默认\(n \leq m\)):

\(\begin{align*} f(n,m) & = \sum\limits_{i=1}^n \sum\limits_{j=1}^m \gcd(i,j)^2 \\ & = \sum\limits_{p=1}^n p^2 \sum\limits_{i=1}^{\frac{n}{p}} \sum\limits_{j=1}^{\frac{m}{p}} \sum\limits_{d | i , d | j} \mu(d) = \sum\limits_{p=1}^n p^2 \sum\limits_{d = 1}^{\frac{n}{p}} \mu(d) \frac{n}{dp} \frac{m}{dp} = \sum\limits_{T = 1}^n \frac{n}{T} \frac{m}{T} \sum\limits_{p | T} p^2 \mu(\frac{T}{p}) \end{align*}\)

可以发现\(\frac{n}{T} \frac{m}{T}\)可以数论分块,那么我们需要求\(g(T) = \sum\limits_{p | T} p^2 \mu(\frac{T}{p})\)的前缀和。

如果数据范围很大\(id^2 * \mu\)可以杜教筛,而\(n,m,p \leq 2 \times 10^7\)显然是可以线性筛的。考虑当前的数\(T\)乘上一个质数\(p\)之后\(g(Tp)\)相比\(g(T)\)的变化。

如果\(p \not\mid T\),那么\(g(T)\)在\(g(Tp)\)中的贡献是\(-1\),而把\(p\)加入到\(g(T)\)中,\(p^2g(T)\)对\(g(Tp)\)的贡献是\(1\),所以\(g(Tp) = (p^2-1)g(T)\)

如果\(p \mid T\),那么\(g(T)\)在\(g(Tp)\)中的贡献就是\(0\),即\(g(Tp) = p^2g(T)\)

那么可以线性筛出所有的\(g(T)\)。复杂度\(O(n + T\sqrt{n})\)

#include<bits/stdc++.h>
//this code is written by Itst
using namespace std; const int _ = 2e7 + 3 , MOD = 1e9 + 7;
int prm[_] , val[_] , cnt;
bool nprm[_]; void init(){
val[1] = 1;
for(int i = 2 ; i <= 2e7 ; ++i){
if(!nprm[i]){
prm[++cnt] = i;
val[i] = (1ll * i * i - 1) % MOD;
}
for(int j = 1 ; prm[j] * i <= 2e7 ; ++j){
nprm[prm[j] * i] = 1;
if(i % prm[j] == 0){
val[i * prm[j]] = 1ll * val[i] * prm[j] % MOD * prm[j] % MOD;
break;
}
val[i * prm[j]] = (1ll * val[i] * prm[j] % MOD * prm[j] % MOD - val[i] + MOD) % MOD;
}
}
for(int i = 2 ; i <= 2e7 ; ++i)
val[i] = (val[i] + val[i - 1]) % MOD;
} long long calc(int x , int y){
int sum = 0;
for(int i = 1 , pi ; i <= x && i <= y ; i = pi + 1){
pi = min(x / (x / i) , y / (y / i));
sum = (sum + 1ll * (val[pi] - val[i - 1] + MOD) * (x / i) % MOD * (y / i)) % MOD;
}
return sum;
} int main(){
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
//freopen("out","w",stdout);
#endif
init(); int T;
for(scanf("%d" , &T) ; T ; --T){
int N , M , P;
scanf("%d %d %d" , &N , &M , &P);
printf("%lld\n" , (calc(N , M) * P + calc(M , P) * N + calc(N , P) * M) % MOD);
}
return 0;
}

Luogu5176 公约数 莫比乌斯反演、线性筛的更多相关文章

  1. 【bzoj2693】jzptab 莫比乌斯反演+线性筛

    题目描述 输入 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M 输出 T行 每行一个整数 表示第i组数据的结果 样例输入 1 4 5 样例输出 122 题解 莫比乌斯反演+线性筛 由 ...

  2. 【bzoj2694】Lcm 莫比乌斯反演+线性筛

    题目描述 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m|\mu(gcd(i,j))|lcm(i,j)$,即$gcd(i,j)$不存在平方因子的$lcm(i,j)$之 ...

  3. 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛

    题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...

  4. 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛

    4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 241  Solved: 119[Submit][Status][Discu ...

  5. BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)

    一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...

  6. Luogu 4917 天守阁的地板(莫比乌斯反演+线性筛)

    既然已经学傻了,这个题当然是上反演辣. 对于求积的式子,考虑把[gcd=1]放到指数上.一通套路后可以得到∏D∏d∏i∏j (ijd2)μ(d) (D=1~n,d|D,i,j=1~n/D). 冷静分析 ...

  7. 莫比乌斯反演/线性筛/积性函数/杜教筛/min25筛 学习笔记

    最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线 ...

  8. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...

  9. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛

    Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...

随机推荐

  1. 大前端的自动化工厂(1)——Yeoman

    一.Yeoman是什么 Yeoman是现代化前端项目的脚手架工具,用于生成包含指定框架结构的工程化目录结构.它是整个前端自动化工厂的第一站. 从个人使用者的角度来看,Yeoman的地位有些鸡肋,因为流 ...

  2. 第33章 密码学(Cryptography),密钥(Keys)和HTTPS - Identity Server 4 中文文档(v1.0.0)

    IdentityServer依赖于几个加密机制来完成它的工作. 33.1 令牌签名和验证 IdentityServer需要非对称密钥对来签署和验证JWT.此密钥对可以是证书/私钥组合或原始RSA密钥. ...

  3. PHP中利用pcntl实现多进程(模拟多线程)实例(转)

    windows不支持pcntl的多线程(非Unix类系统不支持此模块),pcntl在很久很久之前就听过了,但是一直没有尝试着真正要用它. 这不,遇到socket问题了,看socket,遇到pcntl了 ...

  4. C#/VB.NET 给Word文档添加/撤销书签

    在现代办公环境中,阅读或者编辑较长篇幅的Word文档时,想要在文档中某一处或者几处留下标记,方便日后查找.修改时,需要在相对应的文档位置插入书签.那对于开发者而言,在C#或者VB.NET语言环境中,如 ...

  5. Apollo配置中心动态刷新日志级别

    Apollo配置中心动态刷新日志级别 添加次配置后,当在apollo上面调整日志级别不需要重启服务器,马上就能生效 /** * 结合apollo动态刷新日志级别 * @author: nj * @da ...

  6. asp.net DES加密解密

    数据加密标准DES加密算法是一种对称加密算法,DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中 ...

  7. jsp基础语言-jsp异常

    JSP异常 jsp页面执行时会出现两种异常,实际是javax.servlet.jsp包中的两类异常JsError和JspException. 1.JsError 在jsp文件转换成servlet文件时 ...

  8. SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证?

    SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证? 1, MI01 create a physical inventory document, 2, MI04 to inpu ...

  9. 测者的测试技术手册:揭开java method的一个秘密--巨型函数

    揭开java method的一个秘密:巨型函数 相信,很多人都不知道Java的Method的上限为64K.本文将超过这个上限的函数叫做巨型函数. 巨型函数的问题 1.如果代码超过了这个限制,Java编 ...

  10. Delphi中打开网页连接的几种方法

    https://blog.csdn.net/zisongjia/article/details/69398143 正好要用,做个记录.Mark下. 使用了第一种 uses shellapi proce ...