只会写60分算法QuQ

考虑到一个数$x$大于$\sqrt{x}$的质因数最多只有一个,我们可以筛出小于$\sqrt{r}$范围内的所有质因数然后直接用这些取分解质因数。

最后扫一遍发现还没有分解完的就累计到答案中去。

所有下标向左平移$l$位。

时间复杂度 $O(√r+ (r−l+ 1)loglog(r−l+ 1))$

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll; const int N = 1e6 + ;
const ll P = 998244353LL; ll a, b, k, pCnt = , pri[N / 10LL], f[N], g[N];
bool np[N]; inline void sieve() {
for(ll i = ; i <= N; i++) {
if(!np[i]) pri[++pCnt] = i;
for(ll j = ; j <= pCnt && pri[j] * i <= N; j++) {
np[i * pri[j]] = ;
if(i % pri[j] == 0LL) break;
}
}
} int main() {
scanf("%lld%lld%lld", &a, &b, &k);
sieve();
for(ll i = a; i <= b; i++) f[i - a] = i, g[i - a] = 1LL;
for(ll i = ; i <= pCnt; i++) {
if(pri[i] * pri[i] > b) break;
for(ll j = (a / pri[i]) * pri[i]; j <= b; j += pri[i]) {
if(j < a) continue;
ll t = ;
for(; f[j - a] % pri[i] == 0LL; f[j - a] /= pri[i], t++);
g[j - a] = g[j - a] * (t * k + 1LL) % P;
}
}
for(ll i = a; i <= b; i++)
if(f[i - a] != 1LL)
g[i - a] = (g[i - a] * (k + 1LL)) % P; ll ans = 0LL;
for(ll i = a; i <= b; i++)
(ans += g[i - a]) %= P;
printf("%lld\n", ans); return ;
}

最新文章

  1. LintCode 77: 最长公共子序列
  2. Nuget很慢,我们该怎么办
  3. git 删除和重命名文件
  4. codeforces 286 div2 B
  5. jquery实现nav的下拉
  6. JAVA线程锁lock下Condition的使用
  7. 浏览器User-agent String里的历史故事
  8. 用HTML代码加载Unity内容(unity频道:http://unity3d.9ria.com/)
  9. Linux获取线程tid线程名
  10. icacls备份与还原ACL列表(NTFS权限)--Robocopy
  11. Linux学习之十六、文件的格式化与相关处理
  12. java.util.MissingResourceException解决策
  13. .net 控件开发第二天 怎么将 第一天写的代码 用到 .net中来
  14. logstash 输出到elasticsearch 自动建立index
  15. Egret的项目结构
  16. ASP.NET没有魔法——ASP.NET MVC IoC
  17. 16、使用limit offset 分页时,为什么越往后翻越慢?如何解决?
  18. 基本数据类型float和double的区别
  19. Future接口和Callable接口以及FeatureTask详解
  20. Data transfer from GPIO port to RAM buffer using DMA upon receiving a trigger signal on the timer capture input channel.

热门文章

  1. Django中ORM增删改查
  2. 网络编程基础--IO模型
  3. bat显示多行文字,逐个显示哦!不同的颜色!
  4. bzoj 2142 礼物——扩展lucas模板
  5. Linux基础命令-文本文件查看工具
  6. 在阿里云服务器上安装git
  7. IEEE1588精密网络同步协议(PTP)
  8. DIDAO.Common --- 项目中的常用类及其中函数
  9. Java开发Linux常用命令
  10. [置顶] 从零制作文件系统到JZ2440,使其支持telnet , ftp 和tftp