SP20173 DIVCNT2 - Counting Divisors (square)
Refer
主要思路参考了 Command_block 的题解。
Description
给定 \(n\)(\(n\le 10^{10}\)),求
\]
Solution
首先有一个惯例套路:
\]
在 [SDOI2015]约数个数和 以及 BZOJ4176 Lucas的数论 中,我们将这个式子继续化成如下模样,就可以做了:
\]
最后的结果长这样:(然后就可以杜教筛了)
\]
但是这题的这样算结果长这样:
\]
这就不太能做。可见,思维僵化的推导方法有时根本行不通。考虑不反演,直接先枚举 \(x\)、\(y\)。
\]
因为 \(x\)、\(y\) 互质,所以 \(\sum[x|t,y|t,t\le n]=\left[\frac{n}{xy}\right]\),这就是个比较简洁的式子了:
\]
这时摆在我们面前的最常见的做法是把 \(\gcd(x,y)=1\) 拆开来,但是这回,常见的套路并没有成功。我们需要的是一种全新的方法——构造另一个函数并使用反演公式。设:
\]
\]
于是得到:
\]
我们要求的答案是 \(f(n,1)\)。考虑怎么推这个 \(F\),接下来按套路走就可以辣:
\]
仔细看就可以发现 \(t|x,t^2|T\),可以得到:
\]
总的式子就是:
\]
\(d\) 的前缀和可以用类似杜教筛的方法得到,前面的部分,假设第二个求和它是除以 \(t\) (往大了放缩) 的时候复杂度可以分析出是和杜教筛一样的,于是总复杂度就是 \(O(n^{\frac{2}{3}})\)。
Code
在 vjudge 上交过了,洛谷还在 Waiting。
SP20173 DIVCNT2 - Counting Divisors (square)的更多相关文章
- SPOJ 20713 DIVCNT2 - Counting Divisors (square)
DIVCNT2 - Counting Divisors (square) #sub-linear #dirichlet-generating-function Let \sigma_0(n)σ0 ...
- [SPOJ] DIVCNT2 - Counting Divisors (square) (平方的约数个数前缀和 容斥 卡常)
题目 vjudge URL:Counting Divisors (square) Let σ0(n)\sigma_0(n)σ0(n) be the number of positive diviso ...
- SPOJ : DIVCNT2 - Counting Divisors (square)
设 \[f(n)=\sum_{d|n}\mu^2(d)\] 则 \[\begin{eqnarray*}\sigma_0(n^2)&=&\sum_{d|n}f(d)\\ans&= ...
- DIVCNT2&&3 - Counting Divisors
DIVCNT2 - Counting Divisors (square) DIVCNT3 - Counting Divisors (cube) 杜教筛 [学习笔记]杜教筛 (其实不算是杜教筛,类似杜教 ...
- HDU 6069 Counting Divisors
Counting Divisors Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Oth ...
- hdu 6069 Counting Divisors(求因子的个数)
Counting Divisors Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Oth ...
- hdu 6069 Counting Divisors 筛法
Counting Divisors Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Oth ...
- 2017 Multi-University Training Contest - Team 4 hdu6069 Counting Divisors
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6069 题目: Counting Divisors Time Limit: 10000/5000 ...
- hdu6069 Counting Divisors 晒区间素数
/** 题目:hdu6069 Counting Divisors 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意:求[l,r]内所有数的k次方 ...
随机推荐
- HTTP标签
系统的http状态码知识,我是在<图解http里学习的>. 状态码的职责是告知从服务器端返回的请求结果. 分类如下: 2XX --> 成功 200 OK(一般情况) 204 No C ...
- [no_code]OCR表格处理——功能规格说明书
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 功能规格说明书 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作业在哪个具体方面 ...
- FastAPI 学习之路(三十四)数据库多表操作
之前我们分享的是基于单个的数据库表的操作,我们在设计数据库的时候也设计了跨表,我们可以看下数据库的设计. class User(Base): __tablename__ = "users&q ...
- Java代理:静态代理、JDK动态代理和CGLIB动态代理
代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式.所谓的代理者是指一个类别可以作为其它东西的接口.代理者可以作任何东西的接口:网络连接.存储器中的大对象.文件或其它昂贵或无法复制 ...
- linux切换shell
1. $SHELL这一环境变量用于保存当前用户使用的shell,所以我们可以输出$SHELL来查看当前使用的shell是什么: 2. 查看/etc/shells文件,可以看到当前系统中安装的有效的sh ...
- 平分的直线 牛客网 程序员面试金典 C++ Python
平分的直线 牛客网 程序员面试金典 C++ Python 题目描述 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 给定两个vecotrA和B ...
- 第36篇-return字节码指令
方法返回的字节码相关指令如下表所示. 0xac ireturn 从当前方法返回int 0xad lreturn 从当前方法返回long 0xae freturn 从当前方法返回float 0xaf d ...
- Android Studio 查看SQLite数据库存储位置及文件
前言: 之前开发的一个记账本APP,用的是SQLite数据库,会有一些网友问如何查看数据库,这篇博文对此进行一个说明. 操作: 1.通过DDMS(Dalvik Debug Monitor Servic ...
- Redis网络库源码分析(2)之启动服务器
一.从main开始 main函数定义在server.c中,它的内容如下: //server.c int main() { signal(SIGPIPE, SIG_IGN); //忽略SIGPIPE信号 ...
- 不破不立,祝贺EDG夺得S11冠军。这一夜,我看到太多Flag成真
在昨晚11月6号夜进行的2021英雄联盟S11总决赛中,中国战队EDG夺冠!全国各地高校的男生宿舍像过年一般庆祝夺冠,高呼:EDG世界冠军! 前三局1:2的劣势下,第四局十分胶着,最终EDG顽 ...