洛谷P3935 Calculating(整除分块)
题目链接:洛谷
题目大意:定义 $f(x)=\prod^n_{i=1}(k_i+1)$,其中 $x$ 分解质因数结果为 $x=\prod^n_{i=1}{p_i}^{k_i}$。求 $\sum^r_{i=l}f(i)\ mod\ 998244353$。
$1\leq l\leq r\leq 1.6\times 10^{14}$。
阅读以下内容前请先学会前置技能整除分块
先分析一下 $f(x)$ 的本质。
(读者:不要啰嗦来啰嗦去的好吧!这明显是 $x$ 的约数个数吗!是不是想拖延时间?)
好好好,你赢了。我们来看看如何计算。
看到区间 $[l,r]$ 函数求和,我们应该想到拆成前缀和 $pre(r)-pre(l-1)$。
现在看一看 $pre(x)=\sum^x_{i=1}f(i)$ 如何计算。
我们这样考虑:
$1\sim x$ 中有 $\lfloor\frac{x}{1}\rfloor$ 个 $1$ 的倍数,也就是有 $\lfloor\frac{x}{1}\rfloor$ 个数有约数 $1$。
同理有 $\lfloor\frac{x}{2}\rfloor$ 个数有约数 $2$。
有 $\lfloor\frac{x}{3}\rfloor$ 个数有约数 $3$。
$\dots\dots$
有 $\lfloor\frac{x}{i}\rfloor$ 个数有约数 $i$。
所以 $pre(x)=\sum^x_{i=1}\lfloor\frac{x}{i}\rfloor$。
这个……不就是整除分块模板了吗?
对于一段如何求和难度应该不大,可以自己推出来。
(读者:喂,别这么不良心好吧!)
好吧,$[l,r]$ 这段区间的和为 $\lfloor\frac{x}{l}\rfloor(r-l+1)$。
时间复杂度 $O(\sqrt{r})$,空间复杂度 $O(1)$。
既然是模板题一道,那就直接上代码。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=;
ll l,r;
ll solve(ll x){ //整除分块
ll ans=;
for(ll l=,r;l<=x;l=r+){
r=x/(x/l); //左边界推算右边界
ans=(ans+(r-l+)*(x/l))%mod; //求和
}
return ans;
}
int main(){
scanf("%lld%lld",&l,&r);
printf("%lld\n",((solve(r)-solve(l-))%mod+mod)%mod); //前缀和相减
}
整除分块
洛谷P3935 Calculating(整除分块)的更多相关文章
- 洛谷 - P3935 - Calculating - 整除分块
https://www.luogu.org/fe/problem/P3935 求: \(F(n)=\sum\limits_{i=1}^{n}d(i)\) 枚举因子\(d\),每个因子\(d\)都给其倍 ...
- 洛谷P3935 Calculating (莫比乌斯反演)
P3935 Calculating 题目描述 若xx分解质因数结果为\(x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n},令f(x)=(k_1+1)(k_2+1)\cdots ...
- [洛谷P3935]Calculating
题目大意:设把$x$分解质因数的结果为$x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n}$,令$f(x)=(k_1+1)(k_2+1)\cdots (k_n+1)$,求$\su ...
- [P3935] Calculating - 整除分块
容易发现题目要求的 \(f(x)\) 就是 \(x\) 的不同因子个数 现在考虑如何求 \(\sum_{i=1}^n f(i)\),可以考虑去算每个数作为因子出现了多少次,很容易发现是 \([n/i] ...
- 洛谷 P3935 Calculating 题解
原题链接 一看我感觉是个什么很难的式子-- 结果读完了才发现本质太简单. 算法一 完全按照那个题目所说的,真的把质因数分解的结果保留. 最后乘. 时间复杂度:\(O(r \sqrt{r})\). 实际 ...
- 洛谷 P3935 Calculating
虽然对这道题没有什么帮助,但是还是记一下:约数个数也是可以线性筛的 http://www.cnblogs.com/xzz_233/p/8365414.html 测正确性题目:https://www.l ...
- 洛谷P3935 Calculation [数论分块]
题目传送门 格式难调,题面就不放了. 分析: 实际上这个就是这道题的升级版,没什么可讲的,数论分块搞就是了. Code: //It is made by HolseLee on 18th Jul 20 ...
- 洛谷P4198 楼房重建 (分块)
洛谷P4198 楼房重建 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题, ...
- 洛谷P4135 作诗 (分块)
洛谷P4135 作诗 题目描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章 ...
随机推荐
- python基础3之文件操作、字符编码解码、函数介绍
内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...
- 20155233 Exp1 PC平台逆向破解(5)M
Exp1 PC平台逆向破解(5)M 实践一 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 步骤 1.cp pwn1 pwn20155233拷贝pwn1文件,命名为pwn201 ...
- 浅谈Spring中的事务回滚
使用Spring管理事务过程中,碰到过一些坑,因此也稍微总结一下,方便后续查阅. 1.代码中事务控制的3种方式 编程式事务:就是直接在代码里手动开启事务,手动提交,手动回滚.优点就是可以灵活控 ...
- 使用pandas,7行代码实现朴素贝叶斯
作者:hhh5460 大抵分成两类 一.离散的.标签化的数据 原文没有使用pandas,我使用pandas重新实现了朴素贝叶斯算法,看起来非常简洁.清爽. import pandas as pd '' ...
- stl源码剖析 详细学习笔记 hashset hashmap
//---------------------------15/03/26---------------------------- //hash_set { /* hash_set概述: 1:这是一个 ...
- Asp.Net_上传文件(ftp、webClient、webService)
第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...
- 01_python2.x和python3.x中range()的区别
Py2.x 1) .range 和xrange都是经常使用的,特别是range()返回一个列表 2) .xrange()一般用来创建迭代对象 Py3.x xrange()不存在了,只有range()而 ...
- process.tar.gz
exec1.c #include <stdio.h> #include <unistd.h> int main() { char *arglist[3]; arglist[0] ...
- linux 常用命令-ps(process state)
ps -ef | grep 端口号:查看某个端口的占用情况 ps -tunlp | grep 端口号:查看占用端口的进程名称
- jieba分词学习
具体项目在githut里面: 应用jieba库分词 1)利用jieba分词来统计词频: 对应文本为我们队伍的介绍:jianjie.txt: 项目名称:碎片 项目描述:制作一个网站,拾起日常碎片,记录生 ...