Rockdu's Blog
“Where there is will, there is a way”
亲 您的浏览器不支持html5的audio标签
Toggle navigation
Rockdu's Blog
主页
数据结构
字符串算法
图论
数论、数学
动态规划
基础算法
[其它内容]
计算几何
科研笔记
归档
标签
SPOJ DIVCNTK - Counting Divisors (general)
? 解题记录 ?
? SPOJ ?
? 亚线性筛 ?
2020-09-23 08:18:17
569
0
0
rockdu
? 解题记录 ?
? SPOJ ?
? 亚线性筛 ?
[传送门](https://www.spoj.com/problems/DIVCNTK/) 题意:计算$\sigma_0(i^k)$的前缀和 一道牛逼题目,$Min\_25$筛写的很简短。 当$p\in Prime,f(p^c)=ck+1$ 且当$p\in Prime,f(p)=k+1$ 又因为前缀和$\sum^n_{i=1}k+1=n(k+1)$可以$O(1)$ 直接$Min\_25$筛就行了,复杂度$O(10^{11})$能过。 ``` #include<cstdio> #include<algorithm> #define LL unsigned long long #define ui unsigned int using namespace std; const int maxn = 5e6; LL rn, k; ui pri[maxn + 5], vis[maxn + 5], B, t; void pre(int N) { vis[1] = 1; for(register int i = 2; i <= N + 2; ++i) { if(!vis[i]) pri[++(*pri)] = i; for(register int j = 1; j <= *pri && i * pri[j] <= N; ++j) { vis[i * pri[j]] = 1; if(i % pri[j] == 0) break; } } } LL g[maxn + 5], w[maxn + 5]; ui id1[maxn + 5], id2[maxn + 5]; void GetG(LL n) { LL k; ui m = 0; for(register LL l = 1, r; l <= rn; l = r + 1) { r = (n / (n / l)); k = n / l, w[++m] = k; if(k <= B) id1[k] = m; else id2[n / k] = m; g[m] = k - 1; } for(register int i = 1; i <= *pri; ++i) for(register int j = 1; j <= m && 1ll * pri[i] * pri[i] <= w[j]; ++j) { k = w[j] / pri[i]; ui d = (k <= B) ? id1[k] : id2[n / k]; g[j] = g[j] - g[d] + (i - 1); } } inline LL F(int c) { return 1ll * c * k + 1; } LL S(LL n, int m) { if(n <= 1ll || pri[m] > n) return 0; ui d = (n <= B) ? id1[n] : id2[rn / n]; LL ans = 1ll * (k + 1) * (g[d] - (m - 1)), x1, x2; for(register int i = m; i <= *pri && 1ll * pri[i] * pri[i] <= n; ++i) { x1 = pri[i], x2 = 1ll * pri[i] * pri[i]; for(register int p = 1; x2 <= n; ++p, x1 = x2, x2 *= pri[i]) ans += F(p) * S(n / x1, i + 1) + F(p + 1); } return ans; } int main() { scanf("%d", &t); pre(500000); while(t--) { scanf("%llu%llu", &rn, &k); for(B = 1; 1ll * B * B <= rn; ++B); GetG(rn); printf("%llu\n", S(rn, 1) + 1); } return 0; } ```
上一篇:
SPOJ DIVCNT3 - Counting Divisors (cube)
下一篇:
关于一般版本点分治重心错误而复杂度正确的证明
0
赞
569 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册