luoguP4466 [国际集训队]和与积 莫比乌斯反演

自然想到枚举\(gcd(a, b)\),不妨设其为\(d\),并且\(a = di, b = dj(a > b)\)
那么\(\frac{ab}{a + b} = \frac{dij}{i + j}\)
由于此时有\((i,j) = 1\),因此\((i, i + j) = (j, i + j) = 1\)
那么,当且仅当\(i + j | d\)时,\((i, j)\)数对对答案有贡献
对答案有多少的贡献呢?\(\frac{n}{i(i + j)}\) 没有想到这一步
理由是\(d = k(i + j)\),那么只需满足\(ki(i + j) \leq n\)
当\(i > \sqrt n\)时,\((i,j)\)对答案绝对没有贡献
所以答案为\(\sum \limits_{d = 1}^{\sqrt n} \sum \limits_{i = 1}^{\sqrt n / d} \sum \limits_{j} [(i, j) = 1]\frac{n}{i(i + j)}\)
莫比乌斯反演,得到
\(\sum \limits_{d = 1}^{\sqrt n} \mu(d) \sum \limits_{i = 1}^{\sqrt n / d} \sum \limits_{j} \frac{n}{d^2i(i + j)}\)
对内层数论分块统计答案即可一开始把不分块的复杂度算错了,以为能过
分析一下复杂度上界
首先考虑对于确定的\(d\),枚举\(i, j\)的复杂度
\(\sum \limits_{i = 1}^{\sqrt n / d} \sqrt \frac{n}{d^2 i} = \frac{\sqrt n}{d} * \sum \limits_{i = 1}^{\sqrt n / d} \frac{1}{\sqrt i}\)
用归纳法可以证明,右边那个东西\(\leq 2 \sqrt {\sqrt n / d}\)
所以对于一个\(d\)而言,需要\(\frac{n^{\frac{3}{4}}}{d^{\frac{3}{2}}}\)的复杂度
由于\(\frac{1}{1} + \frac{1}{2^{1.5}} + ... + \frac{1}{n^{1.5}} \leq 3\)
所以复杂度就是\(O(n^{\frac{3}{4}})\)
然后绝对跑不到这个上界....
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define ri register int
#define ll long long
#define rep(io, st, ed) for(ri io = st; io <= ed; io ++)
#define drep(io, ed, st) for(ri io = ed; io >= st; io --)
const int sid = 1e5 + 5;
ll ans;
int n, sq, tot;
int mu[sid], nop[sid], pr[sid];
inline void Sieve(int m) {
mu[1] = 1;
rep(i, 2, m) {
if(!nop[i]) {
pr[++ tot] = i;
mu[i] = -1;
}
rep(j, 1, tot) {
int p = i * pr[j];
if(p > m) break; nop[p] = 1;
if(i % pr[j] == 0) break;
mu[p] = -mu[i];
}
}
}
int main() {
cin >> n;
sq = sqrt(n) + 1;
Sieve(sq);
rep(d, 1, sq) {
if(!mu[d]) continue;
int p = d * d;
rep(i, 1, sq / d) {
int fs = n / d / d / i;
for(ri ii = i + 1, jj; ii <= (i << 1) - 1 && ii <= fs; ii = jj + 1) {
jj = min(fs / (fs / ii), (i << 1) - 1);
ans += 1ll * mu[d] * (jj - ii + 1) * (fs / ii);
}
}
}
printf("%lld\n", ans);
return 0;
}
luoguP4466 [国际集训队]和与积 莫比乌斯反演的更多相关文章
- 莫比乌斯反演/线性筛/积性函数/杜教筛/min25筛 学习笔记
最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线 ...
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
- 【洛谷1829】 [国家集训队] Crash的数字表格(重拾莫比乌斯反演)
点此看题面 大致题意: 求\(\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\). 推式子 不会莫比乌斯反演的可以先去看这篇博客:初学莫比乌斯反演. 反演题显然就是推式子啊~~~ 考 ...
- 7.12 NOI模拟赛 积性函数求和 数论基础变换 莫比乌斯反演
神题! 一眼powerful number 复习了一下+推半天. 可以发现G函数只能为\(\sum_{d}[d|x]d\) 不断的推 可以发现最后需要求很多块G函数的前缀和 发现只有\(\sqrt(n ...
- Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)
题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- bzoj 2440 简单莫比乌斯反演
题目大意: 找第k个非平方数,平方数定义为一个数存在一个因子可以用某个数的平方来表示 这里首先需要考虑到二分才可以接下来做 二分去查找[1 , x]区间内非平方数的个数,后面就是简单的莫比乌斯反演了 ...
- 【Learning】 莫比乌斯反演
莫比乌斯反演 对于两个定义域为非负整数的函数\(F(n)\)和\(f(n)\) 若满足:\(F(n)=\sum\limits_{d|n}f(d)\),则反演得到\(f(n)=\sum\limi ...
- 我也不知道什么是"莫比乌斯反演"和"杜教筛"
我也不知道什么是"莫比乌斯反演"和"杜教筛" Part0 最近一直在搞这些东西 做了将近超过20道题目吧 也算是有感而发 写点东西记录一下自己的感受 如果您真的 ...
随机推荐
- Shell基础-通配符
* - 通配符,代表任意字符 ? - 通配符,代表一个字符 # - 注释 | - 分隔两个管线命令的界定 ; - 连续性命令的界定 ~ - 用户的根目录 $ - 变量前需要加的变量值 ! - 逻辑运算 ...
- oracle02--多表关联查询
1. 多表(关联)查询 多表查询也称之为关联查询.多表关联查询等,主要是指通过多个表的关联来获取数据的一种方式. 1.1. 多表映射关系 一对多:A表的一行数据,对应B表中的多条.如:一个部门可以对应 ...
- ctime 时间
1. 类型clock_t: 是个long型,用来记录一段时间内的时钟计时单元数,即CPU的运行单元时间.size_t: 标准C库中定义的,应为unsigned int,在64位系统中为long uns ...
- js中字符串的常用方法
一.普通方法 1.字符方法 动态方法:1.str.charAt(index); 返回子字符串,index为字符串下标,index取值范围[0,str.length-1] 动态方法:2.str.cha ...
- java基础79 会话管理(Cookie技术、Session技术)
1.概念 会话管理:管理浏览器和服务器之间会话过程中产生的会话数据. Cookie技术:会话数据保存到浏览器客户端.[存 编号/标记(id)] Session技术:会话技术会保存到 ...
- CxGrid 表格标题头居中
选中这些列后 搞.
- Es官方文档整理-3.Doc Values和FieldData
Es官方文档整理-3.Doc Values和FieldData 1.Doc Values 聚合使用一个叫Doc Values的数据结构.Doc Values使聚合更快.更高效且内存友好. Doc Va ...
- Git简明教程二、开始进行版本管理
上一篇介绍了Git中的一些基本概念.本篇来实际看一看如何通过几个常用命令来快速上手Git,完成版本管理的日常操作(核心操作). 0. 准备工作 安装Git后,请先在你的电脑上新建或选择一个目录作为测试 ...
- PowerTool x64驱动模块逆向分析(持续更新)
比赛打完了,来继续搞了,因为那个主动防御正在写,所以想找找思路正好想到可以来逆向一下PT的驱动模块看看pt大大是怎么写的程序. PT x64版本的驱动模块是这个kEvP64.sys. 0x0 先来看看 ...
- Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果: 因为此效果实现的步骤 ...