洛谷题面传送门

首先推式子:

\[\begin{aligned}
ans&=\sum\limits_{i=A}^B\sum\limits_{j=1}^i\{\dfrac{i}{j}\}
\end{aligned}
\]

考虑差分,设

\[f(n)=\sum\limits_{i=1}^n\sum\limits_{j=1}^i\{\dfrac{i}{j}\}
\]

那么

\[ans=f(B)-f(A-1)
\]

考虑如何计算 \(f(n)\):

\[\begin{aligned}
f(n)&=\sum\limits_{i=1}^n\sum\limits_{j=1}^i\{\dfrac{i}{j}\}\\
&=\sum\limits_{i=1}^n\sum\limits_{j=1}^i\dfrac{i}{j}-\lfloor\dfrac{i}{j}\rfloor\\
&=\sum\limits_{i=1}^ni·\sum\limits_{j=1}^i\dfrac{1}{j}-\sum\limits_{i=1}^n\sum\limits_{j=1}^n\lfloor\dfrac{i}{j}\rfloor\\
\end{aligned}
\]

如果设 \(s_i=\sum\limits_{j=1}^i\dfrac{1}{j}\),那么减号前面的东西可写作 \(\sum\limits_{i=1}^ni·s_i\),一遍前缀和求出。下面着重考虑减号右边的东西:

\[\begin{aligned}
\sum\limits_{i=1}^n\sum\limits_{j=1}^n\lfloor\dfrac{i}{j}\rfloor
\end{aligned}
\]

然后就是此题一个比较亮眼的地方了,考虑对 \(\lfloor\dfrac{i}{j}\rfloor\) 进行等价转化,不难发现 \(\lfloor\dfrac{i}{j}\rfloor=\sum\limits_{j\mid k}[k\le i]\),于是乎原式改写为:

\[\sum\limits_{i=1}^n\sum\limits_{j=1}^n\sum\limits_{k\mid j}[k\le i]
\]

考虑每个 \(k\) 会对多少对 \((i,j)\) 产生贡献,显然符合条件的 \(i\) 的个数为 \((n+1-i)\),\(j\) 的个数为 \(d(k)\),其中 \(d\) 为约数个数和函数,那么上式可进一步写作:

\[\sum\limits_{k=1}^n(n+1-k)·d(k)
\]

维护 \(d(k),k·d(k)\) 的前缀和即可快速计算上式。

如果您比较勤快使用线性筛求解 \(d\) 那么时间复杂度为 \(\mathcal O(n)\),而我比较懒所以直接调和级数枚举,复杂度 \(n\log n\)。

using namespace fastio;
const int MAXN=1e6;
int inv[MAXN+5],s[MAXN+5],ss[MAXN+5],d[MAXN+5],sd[MAXN+5],ssd[MAXN+5];
void init(){
for(int i=(inv[0]=inv[1]=1)+1;i<=MAXN;i++) inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=MAXN;i++) s[i]=(s[i-1]+inv[i])%MOD,ss[i]=(ss[i-1]+1ll*s[i]*i)%MOD;
for(int i=1;i<=MAXN;i++) for(int j=i;j<=MAXN;j+=i) d[j]++;
for(int i=1;i<=MAXN;i++) sd[i]=(sd[i-1]+d[i])%MOD,ssd[i]=(ssd[i-1]+1ll*i*d[i])%MOD;
}
int calc(int x){return (ss[x]-(1ll*(x+1)*sd[x]%MOD-ssd[x]+MOD)%MOD+MOD)%MOD;}
int main(){
init();int qu;read(qu);
while(qu--){
int l,r;read(l);read(r);
printf("%d\n",(calc(r)-calc(l-1)+MOD)%MOD);
}
return 0;
}

洛谷 P4900 - 食堂(推式子)的更多相关文章

  1. [洛谷P4900]食堂

    题目大意:$n(n\leqslant10^6)$组询问,每组询问给出$l,r(l,r\leqslant10^6)$,求($\{\dfrac ij\}$表示$\dfrac ij$的小数部分): $$\s ...

  2. NOIP2000方格取数(洛谷,动态规划递推)

    先上题目: P1004 方格取数 下面上ac代码: ///如果先走第一个再走第二个不可控因素太多 #include<bits/stdc++.h> #define ll long long ...

  3. P1541 乌龟棋 题解(洛谷,动态规划递推)

    题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...

  4. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)

    先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...

  5. P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)

    题目链接:P1060 开心的金明 基本思路: 基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是 f[j]=max(f[j],f[j-v[i]]+p[i]); 那么这里 ...

  6. P1048 采药(洛谷,动态规划递推,01背包原题)

    题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...

  7. 洛谷 P7360 -「JZOI-1」红包(Min-Max 容斥+推式子)

    洛谷题面传送门 hot tea. 首先注意到这个 \(\text{lcm}\) 特别棘手,并且这里的 \(k\) 大得离谱,我们也没办法直接枚举每个质因子的贡献来计算答案.不过考虑到如果我们把这里的 ...

  8. 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)

    洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...

  9. 洛谷 1447 [NOI2010]能量采集——容斥/推式子

    题目:https://www.luogu.org/problemnew/show/P1447 1.容斥原理 求 f [ i ] 表示 gcd==i 的对数,先 f [ i ] = (n/i) * (m ...

随机推荐

  1. C语言对"不定长"字符串数组的遍历

    一般来说,c语言的数组的初始化可以通过三种方式: {0},在声明时使用,如 int a[10]={0} 使用memset, memset(array,0,sizeof(array)) 用for循环赋值 ...

  2. jquery-无缝滚动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. [no code][scrum meeting] Beta 5

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月18日14:30,主持者:叶开辉 下次例会时间:5月19日11:30,主持者:黎正宇 一.工作 ...

  4. spring cloud hystrix的隔离策略和dashboard

    随着服务的拆分,各个服务有着明确的职责,服务之间通过轻量级的协议进行通讯.但有时候我们完成一个功能需要同时调用多个微服务,比如完成订单的创建,那么获取用户信息需要调用用户微服务,获取商品信息需要调用商 ...

  5. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  6. 野指针和free总结超有用的资料

    在C语言项目中,经常会遇到需要程序员手动分配内存的地方.这样做能够节省大量的内存空间,也让程序更加灵活.只要你有一定的基础,那么肯定用过 malloc 或者 ralloc和free的组合.这个组合使用 ...

  7. 单源最短路径算法:迪杰斯特拉 (Dijkstra) 算法(二)

    一.基于邻接表的Dijkstra算法 如前一篇文章所述,在 Dijkstra 的算法中,维护了两组,一组包含已经包含在最短路径树中的顶点列表,另一组包含尚未包含的顶点.使用邻接表表示,可以使用 BFS ...

  8. DDD领域驱动设计架构模式:防腐层(Anti-corruption layer)

    在微服务(Microservices)架构实践中,架构设计借用了DDD中的一些概念和技术,比如一个微服务对应DDD中的一个限界上下文(Bounded Context):在微服务设计中应该首先识别出DD ...

  9. Spring Boot 2.5.0 重新设计的spring.sql.init 配置有何用?

    前几天Spring Boot 2.5.0发布了,其中提到了关于Datasource初始化机制的调整,有读者私信想了解这方面做了什么调整.那么今天就要详细说说这个重新设计的配置内容,并结合实际情况说说我 ...

  10. Open vSwitch 应用实践

    基础配置以及要点: 1.交换机创建和端口的配置 1) 创建一个新的 OVS 交换机[格式:$ ovs-vsctl add-br [名称]] $ovs-vsctl add-br ovs-switch 2 ...