这题做的历程堪称惊心动魄

刚刚学了莫比乌斯反演的我高高兴兴的和cbx一起反演式子

期间有突破,有停滞,有否定

然后苟蒻的我背着cbx偷偷打开了题解

看到了

我。。。。。。

去你的有个性质啊(当然还是自己知识储备不足)

具体证明
(其实当时主要是想的方向偏了,不然这个定理自己也能想出来)

然后就可以愉快的反演了

 Σ(i∈[1,n])Σ(j∈[1.m])d(x,y)

(i=1)Σ(j=1)Σ(x|i)Σ(y|j)[gcd(x,y)==1]

(i=1)Σ(j=1)((n/i)*(m/j))Σ(d|i&&d|j)μ(d)

(d=1)μ(d)Σ(i=1) (n/(d*i)) Σ(j=1)(m/(d*j))

然后我们观察Σ(n/(d*i))
根据性质 (n/(d*i))==((n/d)/i)
我们发现这个东西可以用数论分块O(sqrt(n))预处理,设为f[i]
则原式= Σ(d=1)(μ(d)f[n/d]*f[m/d])
再用数论分块就好了
复杂度O(n*sqrt(n)+T*sqrt(n))

 1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4 #define ll long long
5 using namespace std;
6 int mu[50100],p[50010],top;ll tot[50100],f[50100];bool v[50010];
7 int main(){
8 f[1]=1;tot[1]=1;
9 for(int i=2;i<=50000;i++){
10 if(!v[i]){
11 p[++top]=i;
12 mu[i]=-1;
13 }
14 for(int j=1;j<=top&&i*p[j]<=50000;j++){
15 if(!(i%p[j])){
16 v[i*p[j]]=1;
17 break;
18 }
19 mu[i*p[j]]=-mu[i];
20 v[i*p[j]]=1;
21 }
22 tot[i]=tot[i-1]+mu[i];
23 int x;
24 for(int j=1;j<=i;j=x+1){
25 x=(i/(i/j));
26 f[i]+=(x-j+1)*(i/j);
27 }
28 }
29 int j,n,m,t;ll ans;
30 scanf("%d",&t);
31 while(t--){
32 scanf("%d%d",&n,&m);
33 if(n>m) swap(n,m);ans=0;
34 for(int i=1;i<=n;i=j+1){
35 j=min((n/(n/i)),(m/(m/i)));
36 ans+=(tot[j]-tot[i-1])*f[n/i]*f[m/i];
37 }
38 printf("%lld\n",ans);
39 }
40 }

第一篇题解博客纪念

bzoj3994: [SDOI2015]约数个数和(反演+结论?!)的更多相关文章

  1. P3327/bzoj3994 [SDOI2015]约数个数和(莫比乌斯反演)

    P3327 [SDOI2015]约数个数和 神犇题解(转) 无话可补 #include<iostream> #include<cstdio> #include<cstri ...

  2. BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)

    Description  设d(x)为x的约数个数,给定N.M,求     Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Out ...

  3. BZOJ3994: [SDOI2015]约数个数和

    Description  设d(x)为x的约数个数,给定N.M,求     Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M.   O ...

  4. bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和

    http://www.lydsy.com/JudgeOnline/problem.php?id=3994 设d(x)为x的约数个数,给定N.M,求 用到的一个结论: 证明: 枚举n的约数i,枚举m的约 ...

  5. bzoj 3994 [SDOI2015]约数个数和——反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3994 \( d(i*j)=\sum\limits_{x|i}\sum\limits_{y|j ...

  6. [bzoj3994][SDOI2015]约数个数和-数论

    Brief Description 计算\(\sum_{i\leqslant n}\sum_{j\leqslant m}\sigma_0(ij)\). Algorithm Design 首先证明一个结 ...

  7. 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演

    [BZOJ3994][SDOI2015]约数个数和 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...

  8. 【BZOJ3994】约数个数和(莫比乌斯反演)

    [BZOJ3994]约数个数和(莫比乌斯反演) 题面 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] 多组数据\((<=50000组)\) \(n,m<=50000\ ...

  9. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演

    BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...

随机推荐

  1. YTU 2911: 我想放假

    2911: 我想放假 时间限制: 1 Sec  内存限制: 128 MB 提交: 124  解决: 46 题目描述 小明的弟弟上小学了,每次刚入学就想知道什么时候放假,但是每学期开学的日子和每学期的有 ...

  2. es的forcemerge——按照天分割

    归并线程配置 segment 归并的过程,需要先读取 segment,归并计算,再写一遍 segment,最后还要保证刷到磁盘.可以说,这是一个非常消耗磁盘 IO 和 CPU 的任务.所以,ES 提供 ...

  3. AutoIT: 如何通过坐标相对位置来对无法识别的Menu以及GridView进行定位点击操作

    一般情况下,GridView中的数据来自数据库,我们通过Windows Info,是无法获取GridView中的信息的.而软件定制的Menu,很多时候无法通过系统提供的WinMenuSelectIte ...

  4. sass 安装与各种命令

    css 是一种编程语言,可以用来开发网页样式,但是却不能编程,没有变量,没有条件语句,于是就有了“css预处理器”, 它的原理就是:利用编程语言进行网页样式设计,然后再编译成正常的css文件: sas ...

  5. bzoj3620

    KMP 我似乎复杂度写的不对... 因为位置相同只算一次,后缀数组什么的都不管用了,我们就暴力kmp,但是我写的是暴力跳...竟然过了...我写bzoj3670才发现... #include<c ...

  6. 461. Hamming Distance(汉明距离)

    The Hamming distance between two integers is the number of positions at which the corresponding bits ...

  7. cardboard sdk for unity 系统分析 - 对像与类

    一.cardboard通过monobehavior派生的脚本组件与UNITY3D联系起来: 二.相关的类及其关系如下图:

  8. Linux网络流量实时监控ifstat iftop命令详解(转载)

    转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858923.html ifstat 介绍 ifstat工具是个网络接口监测工具,比较简 ...

  9. HDU-ACM“菜鸟先飞”冬训系列赛——第10场

    Problem A 题意 给出l(房子宽度),d(pole距离房子的垂直距离),s(绳子长度),求可覆盖的面积 分析 一共四种情况 \[1.s<=d\] \[2.s<=sqrt(d*d+l ...

  10. bzoj 3677: [Apio2014]连珠线【树形dp】

    参考:http://www.cnblogs.com/mmlz/p/4456547.html 枚举根,然后做树形dp,设f[i][1]为i是蓝线中点(蓝线一定是父子孙三代),f[i][0]为不是,转移很 ...