题目大意:设把$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)$,求$\sum\limits_{i=l}^r f(i)(1\leqslant l\leqslant 10^{14},1\leqslant r\leqslant 1.6\times10^{14},r-l>10^{14}$

题解:可知$f(x)$为$x$的因数个数,可以把$\sum\limits_{i=l}^rf(i)$拆成$\sum\limits_{i=1}^rf(i)-\sum\limits_{i=1}^lf(i)$。
$$
\def\dsum{\displaystyle\sum\limits}
\def\dprod{\displaystyle\prod\limits}
\begin{align*}
f(p)&=\dprod_{i=1}^n(k_{p,i}+1)\\
    &=\dsum_{i=1}^n[i|p]\\
\end{align*}\\
带回原式
$$

$$
\def\dsum{\displaystyle\sum\limits}
\def\dprod{\displaystyle\prod\limits}
\begin{align*}
令g(p)&=\dsum_{x=1}^pf(x)\\
    &=\dsum_{x=1}^p\dsum_{i=1}^x[i|x]\\
    &=\dsum_{i=1}^p\big\lfloor\dfrac p i\big\rfloor\\
\end{align*}
$$

整除分块即可。

卡点:1.读入时忘记开$long\;long$

C++ Code:

#include <cstdio>
using namespace std;
const int mod = 998244353;
long long l, r;
long long solve(long long n) {
long long ans = 0, l, r;
for (l = 1; l <= n; l = r + 1) {
r = n / (n / l);
ans = (ans + (r - (l - 1)) * (n / l)) % mod;
}
return ans;
}
int main() {
scanf("%lld%lld", &l, &r);
printf("%lld\n", (solve(r) - solve(l - 1) + mod) % mod);
return 0;
}

最新文章

  1. 如何修改geditor的配置文件 -好像geditor没有文本格式的配置文件? 要使用dconf-editor来配置- geditor自己配置编码格式
  2. git整理
  3. AMD and CMD are dead之KMD规范
  4. jq点击小图 弹出大图(更新版)
  5. ASP.NET MVC 介绍
  6. JAVA设计模式《三》
  7. Ubuntu 16.04 nvidia安装
  8. 不支持关键字“metadata”问题的解决方法
  9. js 轮播图代码
  10. [C#-SQLite] SQLite一些奇怪的问题
  11. TelephonyManager对黑名单的管理
  12. Flume NG 简介及配置实战
  13. PHP文件下载原理
  14. 为SharePoint网站创建自定义导航菜单
  15. 常见 PL.SQL 数据库操作
  16. 关于在打包Jar文件时遇到的资源路径问题(二)
  17. 七个开法者经常忽略或误用的JavaScript基本知识
  18. 页面缓存OutputCache
  19. jQuery源码学习:Deferred Object
  20. Cenots更换YUM源的问题

热门文章

  1. 【c学习-13】
  2. MySQL 清除表空间碎片
  3. python学习之路2(程序的控制结构)
  4. 机器学习基础之knn的简单例子
  5. go学习笔记-包处理
  6. 转:C#微信公众号开发之接收事件推送与消息排重的方法
  7. Bash中使用MySQL导入导出CSV格式数据[转]
  8. 有没有不适合使用flex/lex作为词法分析器的语言?(摘自知乎)
  9. 「暑期训练」「Brute Force」 Multiplication Table (CFR256D2D)
  10. (干货分享)mac python+appium环境搭建