惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
Vercel News
Vercel News
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
量子位
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
IT之家
IT之家
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
博客园 - 三生石上(FineUI控件)

某岛

AtCoder Beginner Contest 409 Luogu P5325. 【模板】Min_25 筛 AtCoder Beginner Contest 371 AtCoder Beginner Contest 369 RPGMaker 2k3 百科 OneShot 的考古 2024“开创拓芯”游戏创享节的相关记录 CJ 回来后的戒断反应 Luogu P10221. [省选联考 2024] 重塑时光 Luogu P5308 [COCI2018-2019#4] Akvizna wqs 二分 歌唱王国 Lean 相关 BZOJ 3153. Sone1 The 2023 ICPC World Finals Luxor 新巴别塔 Sora 的想象与思考 Facebook Hacker Cup 2023 Round 1 AtCoder Beginner Contest 322 LLaMA 2 相关 HuggingFace AI Game Jam ACL 2023 Trans 相关… Luogu P2053. [SCOI2007] 修车 Luogu P1973. [NOI2011] NOI 嘉年华 Luogu P1933. [NOI2010] 旅行路线 Luogu P1954. [NOI2010] 航空管制 Luogu P2048. [NOI2010] 超级钢琴 Luogu P2046. [NOI2010] 海拔 Luogu P3227. [HNOI2013] 切糕
UOJ #188. 【UR #13】Sanrd
2025-03-21 · via 某岛

March 21, 2025

题意:次小素因子前缀和。

类似 PE 521 求最小素因子前缀和,虽然不是积性函数,但不妨碍我们筛。

令 S(n, k) 表示次小质因子 >= P[k] 时的前缀和(P[0] = 0)。
转移,分两种情况:
1. 剩余部分是一个更大的素数,贡献是,p * (g[id(n)] – g[p])。
2. 枚举最小因子分解,递归。

#include <lastweapon/io>
using namespace std;

const int N = int(1e6) + 9;
LL n; int nn; int P[N], Pn;
LL di[N], g[N]; int dn;
inline int id(LL x) {return x <= nn ? x : dn-n/x+1;}

LL S(LL n, int k) {
    int p = P[k]; if (n <= p) return 0;
    LL z = p * (g[id(n)] - g[p]);
    FOR_1(i, k+1, Pn) {
        LL p = P[i]; if (p*p > n) break;
        for (LL j=n/p;j>=p;j/=p) {
            z += S(j, i) + p;
        }
    }
    return z;
}

LL S(LL n) {
    ::n = n; nn = sqrt(n); Pn = dn = 0;
    for (LL i=1,j;i<=n;i=j+1) {
        di[++dn] = j = n/(n/i);
        g[dn] = j-1;
    }
    FOR_1(p, 2, nn) if (g[p] != g[p-1]) {
        P[++Pn] = p; for (LL i=dn,ii=di[i];(LL)p*p<=ii;ii=di[--i]) {
            g[i] -= g[id(ii/p)] - g[p-1];
        }
    }
    if (!Pn) return 0;
    return S(n, 0);
}

int main(){
    LL l, r; RD(l, r);
    cout << S(r) - S(l-1) << endl;
}

Posted by xiaodao
Category: 日常