题目地址

http://acm.hdu.edu.cn/showproblem.php?pid=6715

题解

还是不会这题的容斥做法qwq。hjw当场写了个容斥A了。我推了个莫反,但是没反应过来我的式子能\(n\log n\)暴力算...

\[\begin{aligned}
&\sum_i \sum_j \mu(\frac{ij}{(i,j)})\\
&=\sum_{d} \sum_i \sum_j \mu(\frac{i}{d}) \mu(\frac{j}{d}) \mu(d) [(i,j)=d]\\
&=\sum_{d}\mu(d)\sum_i^{\frac{n}{d}} \sum_j ^\frac{m}{d} \mu(id)\mu(jd)[(i,j)=1]\\
&=\sum_{d}\mu(d)\sum_i^{\frac{n}{d}} \sum_j ^\frac{m}{d} \mu(id)\mu(jd)\sum_{k|(i,j)}\mu(k)\\
&=\sum_{d}\mu(d)\sum_{k=1}^{\frac{n}{d}} \mu(k)\sum_i^{\frac{n}{kd}} \sum_j ^\frac{m}{kd} \mu(kdi)\mu(kdj)\\
&设T=kd\\
&=\sum_T \left( \sum_{i} ^ {\frac{n}{T}} \mu(iT) \right) \left( \sum_{j} ^ {\frac{m}{T}} \mu(jT) \right)\sum_{d|T} \mu(d)\mu(\frac{T}{d})
\end{aligned}
\]

第一步就是利用了\(\mu\)是个积性函数的性质,\(i\)和\(j\)除掉\((i,j)\)后显然互质,然后再乘上\((i,j)\)即可得到\(\mu(\frac{ij}{(i,j)})\)了。

然后第二步是乘上了\(\mu^2 (d)\)(当\(d\)无平方因子时,\(\mu^2 (d)=1\),当有平方因子时本身这一项也是\(0\)),所以可以直接乘上\(\mu^2 (d)\)而不会对式子造成影响。

最后式子三个东西全都能\(n \log n\)埃筛筛出来...总复杂度\(O(T n \log n)\)

开了long long所以可能跑的比较慢...看起来是不用开的

#include <bits/stdc++.h>
using namespace std; namespace io {
char buf[1<<21], *p1 = buf, *p2 = buf, buf1[1<<21];
inline char gc() {
if(p1 != p2) return *p1++;
p1 = buf;
p2 = p1 + fread(buf, 1, 1 << 21, stdin);
return p1 == p2 ? EOF : *p1++;
}
#define G gc #ifndef ONLINE_JUDGE
#undef G
#define G getchar
#endif template<class I>
inline void read(I &x) {
x = 0; I f = 1; char c = G();
while(c < '0' || c > '9') {if(c == '-') f = -1; c = G(); }
while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = G(); }
x *= f;
} template<class I>
inline void write(I x) {
if(x == 0) {putchar('0'); return;}
I tmp = x > 0 ? x : -x;
if(x < 0) putchar('-');
int cnt = 0;
while(tmp > 0) {
buf1[cnt++] = tmp % 10 + '0';
tmp /= 10;
}
while(cnt > 0) putchar(buf1[--cnt]);
} #define in(x) read(x)
#define outn(x) write(x), putchar('\n')
#define out(x) write(x), putchar(' ') } using namespace io; #define ll long long
const int N = 1000010; int T, n, m;
int p[N], cnt, vis[N];
ll mu[N], S1[N], S2[N], S3[N]; void init() {
mu[1] = 1;
for(int i = 2; i < N; ++i) {
if(!vis[i]) p[++cnt] = i, mu[i] = -1;
for(int j = 1; j <= cnt && i * p[j] < N; ++j) {
vis[i * p[j]] = 1;
if(i % p[j] == 0) {
mu[i * p[j]] = 0;
break;
}
mu[i * p[j]] = -mu[i];
}
}
for(int i = 1; i < N; ++i) {
for(int j = i; j < N; j += i) {
S3[j] += mu[i] * mu[j / i];
}
}
} int main() {
init(); read(T);
while(T--) {
read(n); read(m);
for(int i = 1; i <= max(n, m); ++i) S1[i] = S2[i] = 0;
if(n > m) swap(n, m);
for(int i = 1; i <= n; ++i)
for(int j = i; j <= n; j += i)
S1[i] += mu[j];
for(int i = 1; i <= m; ++i)
for(int j = i; j <= m; j += i)
S2[i] += mu[j];
ll ans = 0;
for(int i = 1; i <= n; ++i) {
ans += S1[i] * S2[i] * S3[i];
}
outn(ans);
}
}

hdu6715 算术 2019百度之星初赛3-1003的更多相关文章

  1. 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换

    题目传送门 /* 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 比赛时以为是贪心,榨干智商也想不出来:( ...

  2. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  3. HDU 5690:2016"百度之星" - 初赛 All X

    原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  4. 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  5. 【百度之星初赛A】路径交 LCA+线段树

    [百度之星初赛A]路径交 Problem Description 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). ...

  6. 数学 2015百度之星初赛2 HDOJ 5255 魔法因子

    题目传送门 /* 数学:不会写,学习一下这种解题方式:) 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) (h ...

  7. LIS 2015百度之星初赛2 HDOJ 5256 序列变换

    题目传送门 题意:中文题面 分析:LIS(非严格):首先我想到了LIS,然而总觉得有点不对:每个数先减去它的下标,防止下面的情况发生:(转载)加入序列是1,2,2,2,3,这样求上升子序列是3,也就是 ...

  8. Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道

    题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...

  9. BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领

    题目传送门 /* BFS:先把1的入队,每个1和它相邻的组合后看看能不能使0变1,若有则添加入队,change函数返回改变了多少个0 注意:结果还要加上原来占领的 */ #include <cs ...

随机推荐

  1. java内存泄露/溢出等常见问题模拟及原因分析

    Java 8:从持久代到metaspace 系统稳定性--OutOfMemoryError 常见原因及解决方法 java各种异常问题示例(附pdf下载): java.lang.OutOfMemoryE ...

  2. MinGW离线安装

    今天安装下载MinGW-W64-install.exe安装MinGW试了好几次都失败了 因此决定用离线安装包进行安装 1.下载 下载地址https://sourceforge.net/projects ...

  3. Rabbitmq消息积压清理

    #!/bin/bash QUE=`rabbitmqctl list_queues messages_ready name durable|grep -v "^Listing" |g ...

  4. Postman系列三:Postman中post接口实战(上传文件、json请求)

    一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低 ...

  5. Centos7挂载新硬盘

    1.查看系统是否检测到新的硬盘设备 ls /dev/ |grep sd linux 中所有外设都会在这个目录下,对应一个文件,其中第一块硬盘是sda,第二块硬盘是sdb,第三块硬盘是sdc.其中sda ...

  6. 【LeetCode】寻找两个有序数组的中位数【性质分析+二分】

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

  7. fwrite & fread 的使用

    每一次切换文件操作模式必须调用fclose关闭文件. 如果直接切换操作模式,文件将损坏(出现乱码)或操作失败. 在调用了fclose时,作为参数的文件指针将被回收,必须再次定义,因此最好将功能封装. ...

  8. Linux 中的 ~/. 表示的意思

    在Linux中, ~ 表示用户的目录, 如用户名是Gavin, 那么~/表示  /home/Gavin 所以~/. 表示 用户目录下的隐藏文件. 扩展: 若以用户身份登录 ~ 表示 /home  目录 ...

  9. 【IDEA使用技巧】(5) —— IntelliJ IDEA集成Tomcat部署Maven Web项目

    1.IntelliJ IDEA集成Tomcat部署Maven Web项目 1.1.IDEA构建Maven Web项目 使用IDEA来创建一个简单的Hello World的Maven Web项目,并使用 ...

  10. rsync 使用

    rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件. rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分, ...