洛谷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 (k_n+1)f(x)=(k1+1)(k2+1)⋯(kn+1),\)求\(\sum_{i=l}^rf(i)\)对\(998244353\)取模的结果。
输入输出格式
输入格式:
输入共一行,两个数,\(l,r。\)
输出格式:
输出共一行,一个数,为\(\sum_{i=l}^rf(i)\)对\(998244353\)取模的结果。
输入输出样例
输入样例#1:
2 4
输出样例#1:
7
说明


Solution
如果你做过一些莫比乌斯反演的题,那么这道题可以说就是一个整除分块的模板
首先我们需要知道一个定理:约数个数定理
设\(f(x)\)为\(x\)的约数个数
\]
上述式子中,\(p_i\)为质数
证明:
由约数定义可知\(p1^{a1}\)的约数有:\(p1^0, p1^1, p1^2......p1^a1\) ,共\((a1+1)\)个;同理\(p2^{a2}\)的约数有\((a2+1)\)个......\(pk^{ak}\)的约数有\((ak+1)\)个。根据乘法原理答案就是上述式子
考虑一下题目所求,
\]
转换一下变成
\]
对于\(f(n)\),我们可以认为
\]
令\(Ans1=\sum_{i=1}^rf(i)\),由此推出
\]
更换枚举项,改为枚举i的因子
\]
同理求出\(Ans2\),然后用一下整除分块\(O(\sqrt n)\)预处理就可以了,不会的看一下我上面放的链接
Code
#include<bits/stdc++.h>
#define rg register
#define il inline
#define Min(a,b) (a)<(b)?(a):(b)
#define Max(a,b) (a)>(b)?(a):(b)
#define lol long long
using namespace std;
const lol mod=998244353;
void in(lol &ans) {
ans=0; lol f=1; char i=getchar();
while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
while(i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+i-'0',i=getchar();
ans*=f;
}
int main()
{
lol ans1=0,ans2=0; lol n,m; in(n),in(m),n--;
for(rg lol l=1,r,len;l<=n;l=r+1) {
r=n/(n/l),len=r-l+1;
ans1=(1ll*(ans1%mod+len%mod*(n/l)%mod)%mod)%mod;
}
for(rg lol l=1,r,len;l<=m;l=r+1) {
r=m/(m/l),len=r-l+1;
ans2=(1ll*(ans2%mod+len%mod*(m/l)%mod)%mod)%mod;
}
printf("%lld\n",(ans2-ans1+mod)%mod);//注意这里,最后答案一定要(ans+mod)%mod,不然可能会出现负数
return 0;
}
博主蒟蒻,随意转载.但必须附上原文链接
http://www.cnblogs.com/real-l/
洛谷P3935 Calculating (莫比乌斯反演)的更多相关文章
- 洛谷P3935 Calculating(整除分块)
题目链接:洛谷 题目大意:定义 $f(x)=\prod^n_{i=1}(k_i+1)$,其中 $x$ 分解质因数结果为 $x=\prod^n_{i=1}{p_i}^{k_i}$.求 $\sum^r_{ ...
- 洛谷 - P3935 - Calculating - 整除分块
https://www.luogu.org/fe/problem/P3935 求: \(F(n)=\sum\limits_{i=1}^{n}d(i)\) 枚举因子\(d\),每个因子\(d\)都给其倍 ...
- 洛谷 P3935 Calculating
虽然对这道题没有什么帮助,但是还是记一下:约数个数也是可以线性筛的 http://www.cnblogs.com/xzz_233/p/8365414.html 测正确性题目:https://www.l ...
- [洛谷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 题解
原题链接 一看我感觉是个什么很难的式子-- 结果读完了才发现本质太简单. 算法一 完全按照那个题目所说的,真的把质因数分解的结果保留. 最后乘. 时间复杂度:\(O(r \sqrt{r})\). 实际 ...
- [洛谷3935]Calculating
题目链接:https://www.luogu.org/problemnew/show/P3935 首先显然有\(\sum\limits_{i=l}^rf(i)=\sum\limits_{i=1}^rf ...
- 洛谷P3935 Calculation [数论分块]
题目传送门 格式难调,题面就不放了. 分析: 实际上这个就是这道题的升级版,没什么可讲的,数论分块搞就是了. Code: //It is made by HolseLee on 18th Jul 20 ...
- 整除分块学习笔记+[CQOI2007]余数求和(洛谷P2261,BZOJ1257)
上模板题例题: [CQOI2007]余数求和 洛谷 BZOJ 题目大意:求 $\sum^n_{i=1}k\ mod\ i$ 的值. 等等……这题就学了三天C++的都会吧? $1\leq n,k\leq ...
- 莫比乌斯反演学习笔记+[POI2007]Zap(洛谷P3455,BZOJ1101)
先看一道例题:[POI2007]Zap BZOJ 洛谷 题目大意:$T$ 组数据,求 $\sum^n_{i=1}\sum^m_{j=1}[gcd(i,j)=k]$ $1\leq T\leq 50000 ...
随机推荐
- List和String数组相互转化
在工作中经常会遇到需要String[] 参数的地方,我们可以先定义一个list,再转成String[] 来使用,使用list的好处自然是可以随时方便的添加删除元素,下面是方法: List list = ...
- yun rpm
RPM:RedHat Package Manager的简称,是一种数据库记录的方式的管理机制.当需要安装的软件的依赖软件都已经安装,则继续安装,否则不予安装. 特点:1.已经编译并打包完成2.软件的信 ...
- springMVC使用拦截器检查用户登录
参考文章 编写拦截器类 package cultivate_web.interceptor; import javax.servlet.http.HttpServletRequest; import ...
- Java 变量和输入输出
一些重要知识 一个源文件里只能有一个public类,其它类数量不限.文件名与public类名相同 JAVA程序严格区分大小写 JAVA应用程序的执行入口是main方法固定写法:public stati ...
- Alpha冲刺——第三天
Alpha第三天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- Java容器之List接口
List 接口: 1. List 接口是 Collection 的子接口,实现 List 接口的容器类中的元素是有顺序的,而且可以重复: 2. List 容器中的元素都对应一个整数型的序号记载其在容器 ...
- linux系统中如何进入退出vim编辑器的方法及区别
在linux家族中,vim编辑器是系统自带的文本编辑器,其功能强大自不必说了. 偶有小白,刚接触linux,要修改某个文本文件,不可能像WINDOWS那样操作,更有甚者,进入VI编辑器后,无法退出以致 ...
- tcp传送报文
707 void tcp_init_xmit_timers(struct sock *sk)708 {709 inet_csk_init_xmit_timers(sk, &tcp_wr ...
- ConcurrentHashMap弱一致性
[原文链接] 本文将用到Java内存模型的happens-before偏序关系(下文将简称为hb)以及ConcurrentHashMap的底层模型相关的知识.happens-before相关内容参见: ...
- Windows 8.1 SecureBoot未正确配置的解决方法
使用联想Y510P,安装win8.1后破解 ,屏幕右下角老是显示 SecureBoot未正确配置的解决方法,以下是解决方案 步骤1:在机器重启至“Lenovo字样的屏幕”时,不停敲击“F2”键或“Fn ...