我们先枚举一个最大质因子,然后设 \(dp[n][k]\) 为 \(n\) 以内使用了 \(pri[k]\) 以内的质数的数的最大质因子之和,答案就是:

\[\sum_{k\leq n}dp[\lfloor\frac{n}{pri[k]}\rfloor][k]
\]

当 \(pri[k]\) 大于 \(\sqrt{n}\) 时,后面相当于变成 \(\sqrt{n}\) 以内所有数的最大质因子之和,可以线性筛,质数个数也可以使用叶筛解决。

考虑这个 \(dp\) 怎么办。

根据上面的东西,我们设一个 \(g[n][k]\) 为 \(n\) 以内使用了 \(pri[k]\) 以内的质数的数的个数。有:

\[dp[n][k]=\sum_{i=1}^{k}g[\lfloor\frac{n}{pri[i]}\rfloor][i]\times pri[i]
\]

只要一边筛 \(g\) 一边丢到 \(dp\) 数组里边就好了。

但是注意到丢进去的复杂度是 \(O(\frac{n}{\ln^2n})\) 的,考虑优化。。。

这个 \(g\) 是十分经典的叶筛。\(g\) 的定义为仅用过 \([1,pri[k]]\) 的质数,叶筛的 \(f\) 定义为 \([1,pri[k]]\) 的的质数都没被使用过,即最小质因子为 \(pri[k]\)。

转移可以参考这个过程。得到有:

\[g[n][k]=g[n][k-1]+g[\frac{n}{pri[k]}][k]
\]

当 \(pri[k]^2\geq n\) 时,有:

\[g[n][k]=g[n][k-1]+\lfloor\frac{n}{pri[k]}\rfloor
\]

转移的话可以使用叶筛的那种转移,滚动数组就好了()

然后,对于 \(pri[k]^2\geq n\) 的情况,相当于令一个若干个区间加上若干个值。我们对 \([1,\lfloor\sqrt{n}\rfloor]\) 和 \(\lfloor\frac{n}{i}\rfloor\) 分开考虑。

对于前者,直接把所有区间找出来加上就好了。复杂度是 \(O(\sum_{i=1}^{\frac{\sqrt{n}}{\ln n}}\min(i,\frac{\sqrt{n}}{i\log i}))\leq O(\sum_{i=1}^{\frac{\sqrt{n}}{\ln n}}\frac{\sqrt{n}}{i\log i})\),后者也是相同的复杂度。

处理 \(g\) 对 \(dp\) 的贡献复杂度过高,考虑直接使用 \(g\) 计算答案:

\[\sum_{i=1}^{k}\sum_{j=1}^{i}g[\lfloor\frac{n}{pri[i]pri[j]}\rfloor][j]\times pri[j]
\]
\[\sum_{j=1}^{k}pri[j]\times \sum_{i=j}^{k}g[\lfloor\frac{\lfloor\frac{n}{pri[j]}\rfloor}{pri[i]}\rfloor][j]
\]

我们提前使用叶筛处理质数个数,然后后面对着这个直接整除分块就好了。

复杂度是:

\[O(\sum_{i=1}^{\frac{\sqrt{n}}{\ln n}}\sqrt{\frac{n}{i\ln i}})
\]
\[O(\frac{\int_{1}^{\frac{\sqrt{n}}{\ln n}}\frac{\sqrt{n}}{\sqrt{x}}{\rm d}x}{\sqrt{\ln n}})
\]
\[O(\frac{\sqrt{n}\int_{1}^{\frac{\sqrt{n}}{\ln n}}x^{-\frac{1}{2}}{\rm d}x}{\sqrt{\ln n}})
\]
\[O(\frac{n^{\frac{3}{4}}}{\log n})
\]

加上叶筛,复杂度是 \(O(\frac{n^{\frac{3}{4}}}{\log n})\)。

注意到每次更新的是一段后缀的 \(g\),所以对于后缀完全可以直接动态地维护前缀和。复杂度 \(O(\frac{n^{\frac{3}{4}}}{\log n})\)。

对于前缀,考虑每个修改区间对答案的影响。

注意到我们是先进行一些修改,然后进行一些查询,一共 \(O(\frac{\sqrt{n}}{\ln n})\) 轮。

区间修改区间查询可以使用树状数组的差分方式变成单点修改前缀和。我们考虑使用分块来代替这个树状数组。

考虑块长为 \(B\),每次在块内做后缀和,结束后大块做前缀和,查询 \(O(1)\),复杂度是 \(O(\frac{n^{\frac{3}{4}}}{\ln n}\times B+\frac{n}{B\ln n})\),取 \(B=n^{\frac{1}{8}}\) 可以做到 \(O(\frac{n^{\frac{7}{8}}}{\ln n})\) 的复杂度。怎么这么奇怪啊

这玩意儿当个乐呵就好了。。。。。。下面是正经部分。

考虑怎么通过类似 min25 筛的爆搜去搜这个东西。

每次搜质因子的时候,我们枚举一下这个质因子是否为这个数的次大质因子。如果是,那就在后面跟上一个质数前缀和,否则就接着搜下去。

设 \(f[n]\) 为 \(n\) 以内质数个数,那么这玩意儿看上去是这样的:

\[S(n,k)=\sum_{k<K,p\leq \sqrt{n},p^K\leq n}S(\lfloor\frac{n}{p^K}\rfloor,K)+p\times(f[\lfloor\frac{n}{p^K}\rfloor]-K+1)
\]
#include<cstdio>
typedef unsigned ui;
typedef __uint128_t LL;
typedef unsigned long long ull;
const ui M=1e6+5;
ull l,r;ui g[M];ull f[M];ull B[M];
ui m,top,pri[M];
inline ull DFS(const ull&n,const ui&k,const ull&T){
if(n<=pri[k])return 0;
ull ans(0);
for(ui K=k+1;K<=top&&1ull*pri[K]*pri[K]<=n;++K){
const ui&P=pri[K];const ull&BR=B[P];ull N=LL(n)*BR>>63,M=P;
while(P<=N){
ans+=DFS(N,K,T*M)+P*((N<=m?g[N]:f[T*M])-K+1);
N=LL(N)*BR>>63;M*=P;
}
}
return ans;
}
inline ull Solve(const ull&n){
top=0;m=1;
while(1ull*m*m<=n){
B[m]=((1ull<<63)+m-1)/m;
g[m]=m-1;f[m]=n/m-1;
++m;
}
B[m]=((1ull<<63)+m-1)/m;--m;
for(ui i=2;i<=m;++i)if(g[i]^g[i-1]){
const ull&x=LL(n)*B[i]>>63;const ui&Lim=LL(m)*B[i]>>63,&S=g[i-1];ui lim=m;
if(1ull*lim*i>x)lim=LL(x)*B[i]>>63;
pri[++top]=i;
for(ui j=1;j<=lim;++j){
if(j<=Lim)f[j]-=f[i*j]-S;
else f[j]-=g[LL(x)*B[j]>>63]-S;
}
if(1ull*i*i<=m){
for(ui j=m;j>=i*i;--j){
g[j]-=g[LL(j)*B[i]>>63]-S;
}
}
}
return DFS(n,0,1);
}
signed main(){
scanf("%llu%llu",&l,&r);
printf("%llu",Solve(r)-Solve(l-1));
}

UOJ188题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. War包是什么??

    感谢大佬: https://blog.csdn.net/Stitch__/article/details/88091745 https://www.jianshu.com/p/3b5c45e8e5bd ...

  2. 自动归档autoArchive By H.l

    写点简单的代码,让开发更简单 详情:ios 应用实现快速的临时缓存之模型的自动归档 Demo:https://files.cnblogs.com/files/sixindev/AutoArchiver ...

  3. MySQL之视图篇

    MySQL之视图篇 文章目录 MySQL之视图篇 1. 概述 1.1 为什么使用视图? 1.2 视图的理解 2. 创建视图 2.1 创建单表视图 2.2 针对于多表 2.3 基于视图创建视图 3. 查 ...

  4. Jest_JavaScript测试框架

    Jest是一个JavaScript测试框架,由Facebook用来测试所有JavaScript代码,包括React应用程序. 不同级别的自动化测试:单元.集成.组件和功能. 单元测试可以看作是和在组件 ...

  5. async同步异步

    1.同步:var async = require("async"); async.series([step1, step2, step3],function(err, values ...

  6. 用python的turtle作图(一)静态图

    最近,花了点时间,用python画图. 主要包括三部分,简单的静态图形,复杂的组合图形,图形动画. (一)画静态图形 长方形, 圆, 三角形, 平行四边形, 五角星 (二)图形的组合 笑脸, 国旗, ...

  7. Linux 利用date命令进行时间戳转换

    文章目录 获取当前时间的时间戳 获取已知时间的时间戳 以指定格式输出时间 获取当前时间的时间戳 不加时间的情况下,默认输出当前时间的时间戳 Linux:~ # date +%s 实验效果 为了更好的展 ...

  8. 小程序入门心得(不谈api)

    小程序入门 一.准备 首先先去微信公众平台注册一个小程序账号,去拿到一个AppID(没AppID也可以开发,只是有些功能会受限),注册成功后到开发设置获取自己的AppID,即使有AppID有些功能还是 ...

  9. 私有化轻量级持续集成部署方案--07-私有NPM仓库-Verdaccio

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 对于个人来说,私有NPM仓库 作用性基本很小,但是对于企业,私有NPM仓库 可以保护代码暴露,具有很大的意义. 也是 ...

  10. 业务人员可以进行自助ETL操作?这款BI工具你值得拥有

    ​ETL是什么? ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.E ...