原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3309

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,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b)。

Input

第一行一个数T,表示询问数。
接下来T行,每行两个数a,b,表示一个询问。

Output

对于每一个询问,输出一行一个非负整数作为回答。

Sample Input

4
7558588 9653114
6514903 4451211
7425644 1189442
6335198 4957

Sample Output

35793453939901
14225956593420
4332838845846
15400094813

HINT
【数据规模】

T<=10000
1<=a,b<=10^7

题解

BZOJBZOJ\mathcal{BZOJ}的题面是真的丑,看公式容易瞎。。。

式子的化简还是挺简单的:

∑i=1a∑j=1bf(gcd(i,j))=∑d=1min(a,b)f(d)∑i=1a∑j=1b[d=gcd(i,j)]=∑d=1min(a,b)f(d)∑i=1⌊ad⌋∑j=1⌊bd⌋∑d′|gcd(i,j)μ(d′)=∑d=1min(a,b)f(d)∑d′=1⌊min(a,b)d⌋μ(d′)∑i=1⌊ad⌋∑j=1⌊bd⌋[d′|gcd(i,j)]=∑d=1min(a,b)f(d)∑d′=1⌊min(a,b)d⌋μ(d′)⌊add′⌋⌊bdd′⌋=∑T=1min(a,b⌊aT⌋⌊bT⌋∑d|Tf(d)μ(Td)∑i=1a∑j=1bf(gcd(i,j))=∑d=1min(a,b)f(d)∑i=1a∑j=1b[d=gcd(i,j)]=∑d=1min(a,b)f(d)∑i=1⌊ad⌋∑j=1⌊bd⌋∑d′|gcd(i,j)μ(d′)=∑d=1min(a,b)f(d)∑d′=1⌊min(a,b)d⌋μ(d′)∑i=1⌊ad⌋∑j=1⌊bd⌋[d′|gcd(i,j)]=∑d=1min(a,b)f(d)∑d′=1⌊min(a,b)d⌋μ(d′)⌊add′⌋⌊bdd′⌋=∑T=1min(a,b⌊aT⌋⌊bT⌋∑d|Tf(d)μ(Td)

\begin{align*} &\sum_{i=1}^a\sum_{j=1}^bf(gcd(i,j))\\ &=\sum_{d=1}^{min(a,b)}f(d)\sum_{i=1}^a\sum_{j=1}^b[d=gcd(i,j)]\\ &=\sum_{d=1}^{min(a,b)}f(d)\sum_{i=1}^{\lfloor\frac{a}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{b}{d}\rfloor}\sum_{d'|gcd(i,j)}\mu(d')\\ &=\sum_{d=1}^{min(a,b)}f(d)\sum_{d'=1}^{\lfloor\frac{min(a,b)}{d}\rfloor}\mu(d')\sum_{i=1}^{\lfloor\frac{a}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{b}{d}\rfloor}[d'|gcd(i,j)]\\ &=\sum_{d=1}^{min(a,b)}f(d)\sum_{d'=1}^{\lfloor\frac{min(a,b)}{d}\rfloor}\mu(d')\lfloor\frac{a}{dd'}\rfloor\lfloor\frac{b}{dd'}\rfloor\\ &=\sum_{T=1}^{min(a,b}\lfloor\frac{a}{T}\rfloor\lfloor\frac{b}{T}\rfloor\sum_{d|T}f(d)\mu(\frac{T}{d}) \end{align*}

设F(T)=∑d|Tf(d)μ(Td)F(T)=∑d|Tf(d)μ(Td)F(T)=\sum_{d|T}f(d)\mu(\frac{T}{d}),显然这玩意儿不是积性的(废话F(1)=0F(1)=0F(1)=0你让我怎么积性)。

但是我们已经没法化简了啊,没办法,硬着头皮讨论一波:

设T=∏ki=1paiiT=∏i=1kpiaiT=\prod_{i=1}^kp_i^{a_i},对于TdTd\frac{T}{d},pipip_i的指数只能是000或1" role="presentation" style="position: relative;">111,否则μ(Td)μ(Td)\mu(\frac{T}{d})的值为000,没有意义。这样,对于一个确定的f(d)" role="presentation" style="position: relative;">f(d)f(d)f(d),指数和为奇或为偶的方案数相同,直接抵消成000。

但是,对于T=∏i=1kpia" role="presentation" style="position: relative;">T=∏ki=1paiT=∏i=1kpiaT=\prod_{i=1}^kp_i^a,即质数的指数都一样的时候,当Td=∏ki=1piTd=∏i=1kpi\frac{T}{d}=\prod_{i=1}^kp_i时,f(d)=a−1f(d)=a−1f(d)=a-1,而其他方案的贡献都是aaa,无法抵消,所以需要额外减掉1" role="presentation" style="position: relative;">111,再考虑上μ(Td)=(−1)kμ(Td)=(−1)k\mu(\frac{T}{d})=(-1)^k的贡献,此时F(T)=(−1)k+1F(T)=(−1)k+1F(T)=(-1)^{k+1}。

综上,虽然F(T)F(T)F(T)不是积性的,但是我们仍然可以通过讨论强行套进线筛板子里,只需要记录一下最小质因子的质数以及最小质因子的幂就可以判断一下是否存在质数指数都相等的情况。

推式子的精髓不在于化简,在于你推不下去的时候能把你搞出来辣鸡函数的筛法讨论出来。

代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M=1e7+5;
ll f[M],prod[M],mi[M];
int p[M/3],T;
bool isp[M];
void pre()
{for(int i=2,t;i<M;++i){if(!isp[i])p[++p[0]]=i,f[i]=mi[i]=1,prod[i]=i;for(int j=1;j<=p[0];++j){t=i*p[j];if(t>=M)break;isp[t]=1;if(i%p[j]==0){mi[t]=mi[i]+1,prod[t]=prod[i]*p[j];if(i==prod[i])f[t]=1;else f[t]=(mi[i/prod[i]]==mi[t]?-f[i/prod[i]]:0);break;}prod[t]=p[j],mi[t]=1,f[t]=(mi[i]==1?-f[i]:0);}}for(int i=1;i<M;++i)f[i]+=f[i-1];
}
ll calc(int a,int b)
{if(a>b)swap(a,b);ll ans=0;for(int l=1,r;l<=a;l=r+1)r=min(a/(a/l),b/(b/l)),ans+=1ll*(a/l)*(b/l)*(f[r]-f[l-1]);return ans;
}
void in(){scanf("%d",&T);}
void ac(){pre();int a,b;while(T--)scanf("%d%d",&a,&b),printf("%lld\n",calc(a,b));}
int main(){in();ac();}

BZOJ3309 DZY Loves Math相关推荐

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

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

  2. bzoj3309: DZY Loves Math

    这显然要用莫比乌斯反演: Ans=∑ai=1∑bj=1f(gcd(i,j))=∑df(d)∑⌊ad⌋i=1∑⌊bd⌋j=1[gcd(i,j)=1]=∑df(d)∑⌊ad⌋i=1∑⌊bd⌋j=1∑p|T ...

  3. DZY Loves Math系列

    link 好久没写数学题了,再这样下去吃枣药丸啊. 找一套应该还比较有意思的数学题来做. [bzoj3309]DZY Loves Math 简单推一下. \[\sum_{i=1}^n\sum_{j=1 ...

  4. 【BZOJ3309】DZY Loves Math 解题报告

    [BZOJ3309]DZY Loves Math Description 对于正整数\(n\),定义\(f(n)\)为\(n\)所含质因子的最大幂指数.例如\(f(1960)=f(2^3×5^1×7^ ...

  5. 【BZOJ3309】DZY Loves Math

    3309: DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MB Submit: 411 Solved: 161 [Submit][Status ...

  6. BZOJ 3309 DZY Loves Math

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

  7. 【BZOJ3512】DZY Loves Math IV(杜教筛)

    [BZOJ3512]DZY Loves Math IV(杜教筛) https://www.cnblogs.com/cjyyb/p/10165338.html

  8. bzoj 3739 DZY loves math VIII

    3739: DZY loves math VIII Time Limit: 25 Sec Memory Limit: 512 MB Submit: 318 Solved: 50 [Submit][St ...

  9. BZOJ3560 DZY Loves Math V

    原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3560 DZY Loves Math V Description 给定n个正整数a1,a2 ...

  10. DZY Loves Math 系列详细题解

    BZOJ 3309: DZY Loves Math I 题意 \(f(n)\) 为 \(n\) 幂指数的最大值. \[ \sum_{i = 1}^{a} \sum_{j = 1}^{b} f(\gcd ...

最新文章

  1. 创建自己的人脸识别系统
  2. C语言 浮点数从0递增至1.0的过程
  3. Java柏林算法,柏林噪音 - 我做错了什么?
  4. Eureka的高可用
  5. 在虚拟机上安装redis集群,redis使用版本为4.0.5,本机通过命令客户端可以连接访问,外部主机一直访问不了...
  6. 复习者-Java EE 7概览
  7. 系统学Android从零开始,详细的Android学习指南
  8. Android开发学习笔记-md5加密算法
  9. 搭建centos在线yum源镜像服务器,搭建CentOS在线yum源镜像服务器(上)
  10. 公司组织框架以及人员信息同步到钉钉相关解决方案
  11. 回忆——我对方向的选择
  12. sublime3dsmax - Sublime Text Send To 3ds Max 解决中文路径问题
  13. Android 8.0正式版彩蛋,炸了!微信8.0竟然有18个彩蛋更新!
  14. 【机器人学】当前工业机器人应用中的机械结构设计方法分析
  15. Python 批量修改PDF文件名
  16. 微信小程序组件开发——可视化电影选座
  17. EXCEL身份证号码校验以及提取基本信息
  18. 没有比这个更详细的Elasticsearch教程
  19. 程序员必备的5个工作技能
  20. android webview实现拍照

热门文章

  1. 读论文看到的好的英文词句表达
  2. WebShell脚本检测机器学习二
  3. 河海大学文天学院计算机科学与技术,河海大学文天学院计算机科学与技术2010级软件工程试卷...
  4. mysql数据库wait_timeout_mysql设置wait_timeout详解
  5. 用傅里叶分析得到频域信息 MATLAB,信号分析实验_傅里叶matlab实现.doc
  6. mysql query profiler_Using the New MySQL Query Profiler
  7. 搜索结果去重_华为诺亚方舟实验室推荐与搜索方向六项研究成果获CIKM 2020录用...
  8. hadoop运维笔记
  9. Linux _ Day8 Shell编程之字符截取命令
  10. ORACLE在线切换undo表空间