题意

\(\sigma_0(i)\) 表示 \(i\) 的约数个数

\[S_k(n)=\sum_{i=1}^n\sigma_0(i^k)\pmod {2^{64}}
\]

共 \(T\) 组数据 \(T\le10^4,n,k\le10^{10}\)

题解

其实 SPOJ 上还有 divcnt2,divcnt3 ,三倍经验题2333

其实是 min_25 裸题 233

令 \(f(x) = \sigma_0(x^k)\) ,不难发现它是个积性函数,且单点求值较快。

前面 讲过了如何非递归在 \(\displaystyle O(\frac{n^{\frac{3}{4}}}{\ln n})\) 的时间里处理出所有素数的积性函数的前缀和。

现在终于来填合数的部分了 qwq

令 \(S(n, i)\) 为 \(\le n\) 的所有数 \(x\) 中,\(x\) 的最小质因子 \(\ge P_i\) 的 \(f(x)\) 之和。

接下来我们先算上所有满足条件的质数贡献之和,即 \(\displaystyle g(n,|P|) - \sum_{j = 1}^{i - 1}f(P_j)\) 。

对于合数,我们利用积性的性质,直接枚举其最小质因子以及质因子的个数,直接递归计算。

注意在这里形如 \(p^k,(p∈P)\) 的贡献并没有算进去,所以还要单独加一下。式子的形式如下:

\[S(n,i)=g(n,|P|)-\sum_{j=1}^{i-1}f(P_j)+\sum_{k\ge i}^{|P|}\sum_{e}(f(P_k^e)S(\lfloor\frac{n}{P_k^e}\rfloor,k+1)+f(P_{k}^{e+1}))
\]

最后我们需要求的就是 \(S(n, 1)\) 。因为第二维不能逐次除去,状态是不能很好确定的。所以对于非递归来说不太友好,我们递归计算。

如果当前的 \(n \le 1\) 或者 \(P_i > n\) 那么直接返回 \(0\) 退出。(注意 \(1\) 的贡献是最后单独算的)

然后这个直接计算的复杂度似乎也是 \(\displaystyle O(\frac{n^{\frac{3}{4}}}{\ln n})\) 的。(不会证。。)

最后要解决这题的话,只需要知道

对于 \(x\) 的唯一分解 \(x = \prod_{i} {p_i}^{{k_i}}\)

\[\sigma_0(x) = \prod_{i}(k_i + 1)
\]

所以就有 \(f(p) = k + 1, f(p^e) = ek + 1\) 。然后就能解决此题啦。

代码

#include <bits/stdc++.h>

#define For(i, l, r) for (register int i = (l), i##end = (int)(r); i <= i##end; ++i)
#define Fordown(i, r, l) for (register int i = (r), i##end = (int)(l); i >= i##end; --i)
#define Rep(i, r) for (register int i = (0), i##end = (int)(r); i < i##end; ++i)
#define Set(a, v) memset(a, v, sizeof(a))
#define Cpy(a, b) memcpy(a, b, sizeof(a))
#define debug(x) cout << #x << ": " << (x) << endl using namespace std; typedef unsigned long long ll; template<typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; }
template<typename T> inline bool chkmax(T &a, T b) { return b > a ? a = b, 1 : 0; } inline ll read() {
ll x(0), sgn(1); char ch(getchar());
for (; !isdigit(ch); ch = getchar()) if (ch == '-') sgn = -1;
for (; isdigit(ch); ch = getchar()) x = (x * 10) + (ch ^ 48);
return x * sgn;
} void File() {
#ifdef zjp_shadow
freopen ("34096.in", "r", stdin);
freopen ("34096.out", "w", stdout);
#endif
} const int N = 1e5 + 1e3; int prime[N], pcnt; bitset<N> is_prime; void Linear_Sieve(int maxn) {
is_prime.set();
For (i, 2, maxn) {
if (is_prime[i]) prime[++ pcnt] = i;
for (int j = 1; j <= pcnt && 1ll * i * prime[j] <= maxn; ++ j) {
is_prime[i * prime[j]] = false; if (!(i % prime[j])) break;
}
}
} int id1[N], id2[N]; ll val[N * 2], res[N * 2], k, d, all; #define id(x) (x <= d ? id1[x] : id2[all / (x)]) void Min25_Sieve(ll n) {
d = sqrt(n); int cnt = 0;
for (ll i = 1; i <= n; i = n / (n / i) + 1)
val[id(n / i) = ++ cnt] = n / i, res[cnt] = val[cnt] - 1; for (int i = 1; i <= pcnt && 1ll * prime[i] * prime[i] <= n; ++ i)
for (int j = 1; j <= cnt && 1ll * prime[i] * prime[i] <= val[j]; ++ j)
res[j] -= res[id(val[j] / prime[i])] - (i - 1);
} ll S(ll n, int cur) {
if (n <= 1 || (ll)prime[cur] > n) return 0;
ll ans = (k + 1) * (res[id(n)] - (cur - 1));
for (int i = cur; i <= pcnt && 1ll * prime[i] * prime[i] <= n; ++ i) {
ll prod = prime[i];
for (int e = 1; prod * prime[i] <= n; ++ e, prod *= prime[i])
ans += (e * k + 1) * S(n / prod, i + 1) + ((e + 1) * k + 1);
}
return ans;
} int main () { File(); int cases = read(); Linear_Sieve(1e5); while (cases --) { ll n = read(); k = read(); all = n; Min25_Sieve(n); printf ("%llu\n", S(n, 1) + 1); } return 0; }

SPOJ divcntk(min25筛)的更多相关文章

  1. min25筛学习笔记

    min25筛简介:用来求积性函数F(x)前缀和的,复杂度O(n0.75/logn),大概能求n<=1010. 记一个数x的最小质因子为R(x),所以当x不为质数时,R(x)<=√x这是废话 ...

  2. LOJ# 572. 「LibreOJ Round #11」Misaka Network 与求和(min25筛,杜教筛,莫比乌斯反演)

    题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...

  3. BZOJ-5244 最大真因数(min25筛)

    题意:一个数的真因数指不包括其本身的所有因数,给定L,R,求这个区间的所有数的最大真因数之和. 思路:min25筛可以求出所有最小因子为p的数的个数,有可以求出最小因子为p的所有数之和. 那么此题就是 ...

  4. loj#6235. 区间素数个数(min25筛)

    题意 题目链接 Sol min25筛的板子题,直接筛出\(g(N, \infty)\)即可 筛的时候有很多trick,比如只存\(\frac{N}{x}\)的值,第二维可以滚动数组滚动掉 #inclu ...

  5. 「学习笔记」Min25筛

    「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}​\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...

  6. [总结] min-25筛

    再不写总结我又会忘掉啊啊啊啊啊啊啊啊啊 这个\(min-25\)筛主要用来求一个积性函数的前缀和,就像这样\[\sum_{i=1}^n f(i)\] 不过这个积性函数要满足两个条件:质数\(p\)的函 ...

  7. min25筛学习总结

    前言 杜教筛学了,顺便把min25筛也学了吧= =刚好多校也有一道题需要补. 下面推荐几篇博客,我之后写一点自己的理解就是了. 传送门1 传送门2 传送门3 这几篇写得都还是挺好的,接下来我就写下自己 ...

  8. CodeForces - 83D:Numbers (数学&递归 - min25筛 )

    pro:给定三个整数L,R,P求[L,R]区间的整数有多少个是以P为最小因子的.L,R,P<2e9; sol: 一: 比较快的做法是,用函数的思想递归. 用solve(N,P)表示求1到N有多少 ...

  9. Min25筛

    Min25筛 我是沙雕... 从yyb博客蒯的 要求:\(\sum_{i=1}^nF(x)\) \(F(x)\)是积性函数. \(Min25\)筛能用的前提:质数处的\(f(p)\)值是关于\(p\) ...

  10. 莫比乌斯反演/线性筛/积性函数/杜教筛/min25筛 学习笔记

    最近重新系统地学了下这几个知识点,以前没发现他们的联系,这次总结一下. 莫比乌斯反演入门:https://blog.csdn.net/litble/article/details/72804050 线 ...

随机推荐

  1. C#使用OneNote的图片文字识别功能(OCR)

    http://www.cnblogs.com/Charltsing/p/OneNoteOCR.html 有需要技术咨询的,联系QQ564955427 前段时间有人问我能不能通过OneNote扫描图片, ...

  2. Winform MDI窗体切换不闪烁的解决办法(测试通过)

    https://stackoverflow.com/questions/5817632/beginupdate-endupdate-for-datagridview-request SuspendLa ...

  3. 【转】RCP中org.eclipse.core.runtime.CoreException

    org.eclipse.core.runtime.CoreException: Plug-in TRAIN was unable to load class train.Application. 利用 ...

  4. Redis使用和部分源码剖析以及Django缓存和redis的关系

    0.特点: a.持久化 b.单进程.单线程 c.5大数据类型    d.用于操作内存的软件.    e.虽然是缓存数据库但是可以做持久化的工作 MySQL是一个软件,帮助开发者对一台机器的硬盘进行操作 ...

  5. MySQL中有关NULL的计算

    mysql> select NULL=NULL; #判断两个NULL是否相等,结果不是1也不是0 +-----------+ | NULL=NULL | +-----------+ | NULL ...

  6. Django 组件之 ----- content-type

    Django 组件之 content-type的使用 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开始通过表的设计后,不在后期在修改表,彻底的解决这个问 ...

  7. mysql sql执行计划

    查看Mysql执行计划 使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show pro ...

  8. Linux上的一些基本常用命令

    上传下载文件:// 首先安装lrzsz # yum -y install lrzsz // 上传文件,执行命令rz,会跳出文件选择窗口,选择好文件,点击确认即可.# rz // 下载文件,执行命令sz ...

  9. 剑指offer(8)

    题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: 第一反应想到的是把数右移,每一位与1相与,然后判断个数,但是若输入的为负数,会出现死循环现象. 所以我们设置一个标志量 ...

  10. RabbitMQ基本操作

    更加详细的 链接https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(A ...