题目地址

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. MySQL之备份

    MySQL备份和备份 备份/还原 冷备:需要停止当前正在运行mysqld,然后直接拷贝或打包数据文件. 半热备:mysqldump+binlog --适合数据量比较小的应用 在线热备:AB复制 --实 ...

  2. 【网络开发】详谈socket请求Web服务器过程

    最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有"连接建立"的发生 ...

  3. Xshell设置运行自动化脚本

    使用Xshell工具连接操作Linux系统,并编写运行自动化脚本示例: 这里介绍一种自动化下载日志文件的例子,下面先贴上编写的脚本,这里脚本命名为cyp-assout-log.js 如下: /* xs ...

  4. 一起来学Spring Cloud | 第七章:分布式配置中心(Spring Cloud Config)

    上一章节,我们讲解了服务网关zuul,本章节我们从git和本地两种存储配置信息的方式来讲解springcloud的分布式配置中心-Spring Cloud Config. 一.Spring Cloud ...

  5. PAT(B) 1045 快速排序(C)

    题目链接:1045 快速排序 (25 point(s)) 参考博客:1045 快速排序 (25 point(s))繁星蓝雨 题目描述 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一 ...

  6. 按键消抖——task任务和仿真平台搭建

    一.按键抖动原理 按键抖动原理:按键存在一个反作用弹簧,因此当按下或者松开时均会产生额外的物理抖动,物理抖动会产生电平的抖动. 消抖方法:一般情况下,抖动的总时间会持续20ms以内,按下按键后,等20 ...

  7. 流程审批时执行BE插件

    1.启用审批流时,BE插件解决方案目标框架必须采用.Net Framwork3.5: 2.BE插件相关DLL部署位置:Applicationser/libs.MailServer/libs: 3.BE ...

  8. Badboy与Jmeter脚本录制

    下载地址: http://www.badboy.com.au         Badboy 是一个强大的工具,旨在帮助测试和开发复杂的动态应用,Badboy 包括一个简单而全面的捕获/回放界面,强大的 ...

  9. Luogu4233 射命丸文的笔记 DP、多项式求逆

    传送门 注意到总共有\(\frac{n!}{n}\)条本质不同的哈密顿回路,每一条哈密顿回路恰好会出现在\(2^{\binom{n}{2} - n}\)个图中,所以我们实际上要算的是强连通有向竞赛图的 ...

  10. Java8一Lambda与函数式接口

    关于Lambda表示在工作学习中会经常用到,但并没有全面的去了解.在这里做一个较为详细的记录供以后学习查阅.主要参考Java 8 Lambda 表达式 引言 Java8之前,我们在使用Runnale创 ...