Time Limit: 5000 ms Memory Limit: 512 MB

description

给你\(n, m\),求\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} lcm(i,j)\)

答案对100000009取模。

多组数据。

input

第一行有一个正整数tt表示数据组数

接下来tt行每行有两个正整数n,mn,m

output

tt行,第ii行为第ii组询问的答案。

sample input

1
4 5

sample output

122

HINT

对于100%的数据:\(t≤10000,n,m≤10^7\)

\(100000009\)不是一个质数。


solution

做了几题之后感觉。。推起来稍微顺手一点不对顺脑一点了qwq?

(结果这题还是做了很久嗯qwq)

首先还是先写式子咯

\[\begin{aligned}
ans&=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} lcm(i,j)\\
&=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\frac{ij}{gcd(i,j)}&(抱歉lcm你长得太丑了)\\
&=\sum\limits_{k=1}^{min(n,m)}k\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}ij[gcd(i,j)=1]\\
\\
&这里的话稍微说明一下,我们枚举i和j的gcd(记为k)\\&然后原来的i可以表示为i_0*k,原来的j表示为j_0*k,\\&\frac{ij}{gcd(i,j)}就变成了i_0*j_0*k,所以就变成了上面那样\\
\\
&=\sum\limits_{k=1}^{min(n,m)}k\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}ij\sum\limits_{d|i,d|j}\mu(d)&(\sum\limits_{d|gcd(i,j)}\mu(d)=[gcd(i,j)=1])\\
&=\sum\limits_{k=1}^{min(n,m)}k\sum\limits_{d=1}^{min(\lfloor \frac{n}{k}\rfloor,\lfloor \frac{m}{k}\rfloor)}\mu(d)\sum\limits_{i=1}^{\lfloor \frac{n}{k}\rfloor}i[d\mid i]\sum\limits_{j=1}^{\lfloor \frac{m}{k}\rfloor}j[d\mid j]\\
\\
&观察一下\sum\limits_{i=1}^{\lfloor \frac{n}{k}\rfloor}i[d\mid i],会发现其实这个式子求的就是1到\lfloor \frac{n}{k}\rfloor范围内d的倍数的和\\
\\
&=\sum\limits_{k=1}^{min(n,m)}k\sum\limits_{d=1}^{min(\lfloor \frac{n}{k}\rfloor,\lfloor \frac{m}{k}\rfloor)}\mu(d) (sum(\lfloor \frac{n}{kd}\rfloor)d)(sum(\lfloor \frac{m}{kd}\rfloor)d)&(sum(n)=\sum\limits_{i=1}{n}=\frac{n(n+1)}{2})\\
&=\sum\limits_{T=1}^{min(n,m)}sum(\lfloor \frac{n}{T}\rfloor)sum(\lfloor \frac{m}{T}\rfloor)\sum\limits_{d\mid T}\mu(d)d^2 \frac{T}{d}&(T = kd)
\end{aligned}
\]

化到这一步,我们发现前面的\(sum\)的部分可以直接分块根号搞定(bzoj2820)

后面的东西看起来十分眼熟啊,我们令\(g(x)=\sum\limits_{d\mid x}\mu(d)d^2 \frac{x}{d}\),令\(f(x)=\sum\limits_{d|x}d^2\mu(d)\),令\(h(x)=x\)

那么\(g(x) = \sum\limits_{d\mid x}f(d)h(\frac{x}{d})\),然后由于\(f(d)\)和\(h(\frac{x}{d})\)都是积性函数,所以\(g(x)\)也是积性函数

考虑怎么求\(g(x)\)

我们考虑把这个东西筛出来,按着线性筛的思路来分析一下,求解\(g(x)\)的值

如果说\(x\)为质数,那么显然\(g(x) = x - x^2\)

如果\(x\)不为质数,我们设\(x = i * p\),其中\(p\)为质数,那么有两种情况

  1. \(p \nmid i\) ,由于\(i\)和\(p\)互质而\(g(x)\)为积性函数,\(g(x) = g(i*p) = g(i) * g(p)\)

  2. \(p\mid i\),这个时候就有点。。不是很好搞了。。

    我们可以把\(i\)表示为\(t * p^k\)(\(t\)与\(p\)互质)

    那么我们就尝试一下从乘了一个\(p\)会有什么影响这个方面来考虑一下

    考虑\(g(p^k)\)的值,显然根据\(\mu\)的定义,只有\(\mu(1)\)和\(\mu(p)\)能够提供贡献(其他的\(p\)的指数都>1,所以都是0)

    那么我们就可以得到\(g(p^k) = f(1)p^{k} + f(p)p^{k-1}\)

    然后写出\(g(p^{k+1})\)的表达式,会发现是\(f(1)p^{k+1} + f(p)p^{k}\)

    也就是说\(g(p^{k+1}) = g(p^k) p\)

    那么就可以得到\(g(x) = g(i * p) = g(t * p^k *p) = g(t) * g(p^{k}) * p = g(x) * p\)

然后就可以顺利筛出来啦

那这题好像就十分愉快地做完了ovo


#include<iostream>
#include<cstdio>
#include<cstring>
#define MOD 100000009
#define ll long long
using namespace std;
const int MAXN=1e7+10;
ll p[MAXN],g[MAXN],s[MAXN];
bool vis[MAXN];
int ans;
int n,m,T,pos,tmp;
int prework(int n); int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
scanf("%d",&T);
prework(10000000);
for (int o=1;o<=T;++o){
scanf("%d%d",&n,&m);
if (n>m) swap(n,m);
pos=ans=0;
for (int i=1;i<=n;i=pos+1){
pos=min(n/(n/i),m/(m/i));
ll tmp=(s[n/i]*s[m/i]%MOD*(g[pos]-g[i-1])%MOD)%MOD;
ans=((ll)ans+tmp+MOD)%MOD;
}
printf("%d\n",ans);
}
} int prework(int n){
g[1]=1; s[1]=1;
int cnt=0;
memset(vis,false,sizeof(vis));
for (int i=2;i<=n;++i){
s[i]=(ll)i*(i+1)/2%MOD;
if (!vis[i]){
g[i]=(i-(ll)i*i%MOD+MOD)%MOD;
p[++cnt]=i;
}
for (int j=1;j<=cnt&&i*p[j]<=n;++j){
vis[i*p[j]]=true;
if (i%p[j])
g[i*p[j]]=g[i]*g[p[j]]%MOD;
else{
g[i*p[j]]=g[i]*p[j]%MOD;
break;
}
}
}
for (int i=1;i<=n;++i)
g[i]=(g[i]+g[i-1])%MOD;
}

【BZOJ2693】jzptab的更多相关文章

  1. 【BZOJ2693】jzptab(莫比乌斯反演)

    [BZOJ2693]jzptab(莫比乌斯反演) 题面 讨厌权限题,只能跑到别的OJ上交 和这题是一样的 多组数据 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 前 ...

  2. 【BZOJ2693】jzptab & 【BZOJ2154】Crash的数字表格

    题目 弱化版题目的传送门([BZOJ2154]Crash的数字表格) 加强版题目的传送门([BZOJ2693]jzptab) 思路&解法 题目是要求: \(\sum\limits_{i = 1 ...

  3. 【BZOJ2693】jzptab [莫比乌斯反演]

    jzptab Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description   求 Input 第一行一个 ...

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

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

  5. 【BZOJ2693】jzptab (莫比乌斯反演)

    Description 给你$n$,$m$,求 $\sum^n_{i=1} \sum^m_{j=1} \ lcm(x,y)$ 答案对$100000009$取模. 多组数据. Input 第一行有一个正 ...

  6. 【BZOJ】【2693】JZPTAB

    莫比乌斯反演 PoPoQQQ讲义第5题,是BZOJ 2154的升级版(多次询问) 题解:http://blog.csdn.net/popoqqq/article/details/42078725 WA ...

  7. 【BZOJ 2693】jzptab(莫比乌斯+分块)

    2693: jzptab Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample I ...

  8. 【BZOJ】2693: jzptab 莫比乌斯反演

    [题意]2154: Crash的数字表格 莫比乌斯反演,多组询问,T<=10000. [算法]数论(莫比乌斯反演) [题解]由上一题, $ans=\sum_{g\leq min(n,m)}g\s ...

  9. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

随机推荐

  1. VS2015 (C/C++) 生成的程序,不能在server2008上运行

    项目本来是为Linux下运行做的,但是客户环境需要在windows下运行,幸好用的一些库是跨平台的. 于是用vs2015编译. 然后就发现在2008上却运行时库,装了2015的运行时库后, 在运行,就 ...

  2. 统计输入的汉字,数字,英文,other数量

    主要用正则表达式在完成对汉字,数字,英文数量的验证. import java.util.Scanner; /* * 统计汉字,数字,英文,other * */ public class Test { ...

  3. 读《Linux Shell脚本攻略》(第2版) 总结

    前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...

  4. Shell 编程入门

    首先创建一个文件: 在终端中输入如下命令: vi helloworld.sh 然后按i进行命令编写 下面这句话是必须写的 #!/bin/sh这句话是必须写的 #!/bin/sh a="hel ...

  5. nginx启动停止

    nginx -s reload :修改配置后重新加载生效 nginx -s reopen :重新打开日志文件 nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否 ...

  6. 简化的CDN架构分析

    CDN架构的设计目标是通过复制系统资源(即Web服务器)的方式来获得高性能和高扩展性,为了能确保在海量内容下可以稳定提供高性能的服务.系统资源的复制可以在本地和地理两个尺度上进行.如果是本地复制则响应 ...

  7. ImportError: No module named 'Box2D' 解决办法

    ImportError: No module named 'Box2D'这个问题是由于缺少gym Openai gym是一个用于开发和比较RL算法的工具包,与其他的数值计算库兼容,如tensorflo ...

  8. linux驱动---字符设备的注册register_chrdev说起

    首先我们在注册函数里面调用了register_chrdev(MEM_MAJOR,"mem",&memory_fops),向内核注册了一个字符设备. 第一个参数是主设备号,0 ...

  9. sublime Xdebug 配置

    Sublime Text 配置x-debug 配置php 的x-debug 拓展 下载地址 :http://www.xdebug.org/download.php 放到php ext的目录下 然后使用 ...

  10. STM32 下的库函数和寄存器操作比较

    以 led闪烁中的flashLed函数例子: 库函数操作简单,但是效率不如寄存器操作的高: 寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高 /**下面是通过直接操作库函数的方式实现IO控制 ...