\(\text{Problem}\)



\(\text{Analysis}\)

显然 \(f=\mu^2\)

那么

\[\begin{aligned}
\sum_{i=1}^n \sum_{j=1}^n (i+j)^k

&= \sum_{d=1}^n \mu^2(d) d^{k+1} \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} (i+j)^k [\gcd(i,j)=1] \\
&= \sum_{d=1}^n \mu^2(d) d^{k+1} \sum_{g=1}^{\lfloor \frac{n}{d} \rfloor} \mu(g) g^k \sum_{i=1}^{\lfloor \frac{n}{dg} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{dg} \rfloor} (i+j)^k \\
\end{aligned}
\]

我们考虑预处理

\[f_1 = \sum_{i=1}^n \mu^2(d) d^{k+1} \\
f_2 = \sum_{i=1}^n \mu(d) d^k \\
f_3 = \sum_{i=1}^n \sum_{j=1}^n (i+j)^k
\]

这样就可以数论分快套数论分快搞定

那么就考虑如何预处理这三个前缀和

显然 \(g(d)=d^k\) 是个积性函数,于是可以线筛处理处所有 \(d^k\)

那 \(f_1\) 和 \(f_2\) 一遍就出来了

现在就看 \(f_3\) 了

我们对 \(f_3\) 差分

\[\begin{aligned}
f_3(n)-f_3(n-1)
&= \sum_{i=1}^n \sum_{j=1}^n (i+j)^k - \sum_{i=1}^{n-1} \sum_{j=1}^{n-1} (i+j)^k \\
&= 2 \sum_{i=1}^n (n+i)^k - (2n)^{k}
\end{aligned}
\]

也就是说我们处理出 \(\sum_{i=1}^{2n} d^k\) 就可以处理出这个 \(f_3\) 的差分数组

然后再做一遍前缀和就可以得到 \(f_3\)

到此本题就结束了

注意空间!!

\(\text{Code}\)

#include<cstdio>
#include<iostream>
#define re register
using namespace std;
typedef long long LL; const int N = 1e7, P = 998244353;
LL k;
int totp, n;
int pr[N], vis[N + 5], mu[N + 5], pk[N + 5], spk[N + 5], f1[N / 2 + 5], f2[N / 2 + 5], f3[N / 2 + 5]; inline int fpow(LL x, LL y)
{
LL res = 1;
for(; y; y >>= 1)
{
if (y & 1) res = res * x % P;
x = x * x % P;
}
return res;
} inline void Euler()
{
vis[1] = mu[1] = pk[1] = 1;
for(re int i = 2; i <= N; i++)
{
if (!vis[i]) pr[++totp] = i, mu[i] = -1, pk[i] = fpow(i, k);
for(re int j = 1; j <= totp && i * pr[j] <= N; j++)
{
vis[i * pr[j]] = 1, pk[i * pr[j]] = (LL)pk[i] * pk[pr[j]] % P;
if (!(i % pr[j])) break;
mu[i * pr[j]] = -mu[i];
}
}
for(re int i = 1; i <= N / 2; i++)
f1[i] = ((LL)f1[i - 1] + (LL)pk[i] * i % P * mu[i] * mu[i]) % P,
f2[i] = ((LL)f2[i - 1] + (LL)pk[i] * mu[i] + P) % P;
for(re int i = 1; i <= N; i++) spk[i] = (pk[i] + spk[i - 1]) % P;
for(re int i = 1; i <= N / 2; i++) f3[i] = ((LL)f3[i - 1] + 2LL * (spk[2 * i] - spk[i] + P) % P - pk[2 * i] % P + P) % P;
} inline int query(int n)
{
LL res = 0;
for(re int l = 1, r; l <= n; l = r + 1)
{
r = n / (n / l);
res = (res + (LL)(f2[r] - f2[l - 1] + P) % P * f3[n / l] % P) % P;
}
return res;
} int main()
{
scanf("%d%lld", &n, &k);
Euler();
LL ans = 0;
for(re int l = 1, r; l <= n; l = r + 1)
{
r = n / (n / l);
ans = (ans + (LL)(f1[r] - f1[l - 1] + P) % P * query(n / l)) % P;
}
printf("%lld\n", ans);
}

LG P6156 简单题的更多相关文章

  1. 洛谷 P6222 - 「P6156 简单题」加强版(莫比乌斯反演)

    原版传送门 & 加强版传送门 题意: \(T\) 组数据,求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\g ...

  2. BZOJ 2683: 简单题

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 913  Solved: 379[Submit][Status][Discuss] ...

  3. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  4. Bzoj4066 简单题

    Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 2185  Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...

  5. Bzoj2683 简单题

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  6. 这样leetcode简单题都更完了

    这样leetcode简单题都更完了,作为水题王的我开始要更新leetcode中等题和难题了,有些挖了很久的坑也将在在这个阶段一一揭晓,接下来的算法性更强,我就要开始分专题更新题目,而不是再以我的A题顺 ...

  7. [BZOJ2683][BZOJ4066]简单题

    [BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...

  8. HDU 1753 大明A+B(字符串模拟,简单题)

    简单题,但要考虑一些细节: 前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出 然后处理起来就比较麻烦了. 题目链接 我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜 ...

  9. 团体程序设计天梯赛-练习集L1-014. 简单题

    L1-014. 简单题 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 这次真的没骗你 —— 这道超级简单的题目没有任何输入. ...

  10. bzoj 4066: 简单题 kd-tree

    4066: 简单题 Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 234  Solved: 82[Submit][Status][Discuss] De ...

随机推荐

  1. matplotlib详细教学

    Matplotlib初相识 认识matplotlib Matplotlib是一个Python 2D绘图库,能够以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形,用来绘制各种静态,动态,交互式的 ...

  2. js-day01-商品订单信息

    学会表格表单(html+css) 表格的默认CSS属性 *{             margin: 0;             padding: 0;         }         tabl ...

  3. Java9-17新特性一览,了解少于3个你可能脱节了

    前言 Java8出来这么多年后,已经成为企业最成熟稳定的版本,相信绝大部分公司用的还是这个版本,但是一眨眼今年Java19都出来了,相信很多Java工程师忙于学习工作对新特性没什么了解,有的话也仅限于 ...

  4. 01-复杂度2 Maximum Subsequence Sum (25分)

    Sample Input: 10 -10 1 2 3 4 -5 -23 3 7 -21 Sample Output: 10 1 4 题目有一个测试点是"最大和前面有一段是0",所以 ...

  5. troubleshoot:PVC动态扩容报错

    目录 一.问题描述 二.解决方法 一.问题描述 动态扩容PVC的时候报错(kubectl edit pvc pvcname):"error: persistentvolumeclaims & ...

  6. JavaScript冒泡排序+Vue可视化冒泡动画

    冒泡排序(Bubble Sort)算是前端最简单的算法,也是最经典的排序算法了.网上JavaScript版本的冒泡排序很多,今天用Vue实现一个动态的可视化冒泡排序. 01.JavaScript冒泡排 ...

  7. nuxt.js安装使用

    首先要学会看文档,https://www.nuxtjs.cn/guide/configuration 一.创建项目,并运行 终端运行 npx create-nuxt-app <项目名> ( ...

  8. 【机器学习】李宏毅——Flow-based Generative Models

    前文我介绍了部分关于生成学习的内容,可以参考我这篇博文点此 前面介绍的各个生成模型,都存在一定的问题: 对于PixelRNN这类模型来说,就是从左上角的像素开始一个个地进行生成,那么这个生成顺序是否合 ...

  9. [OpenCV实战]5 基于深度学习的文本检测

    目录 1 网络加载 2 读取图像 3 前向传播 4 处理输出 3结果和代码 3.1结果 3.2 代码 参考 在这篇文章中,我们将逐字逐句地尝试找到图片中的单词!基于最近的一篇论文进行文字检测. EAS ...

  10. [MySQL] 索引的使用、SQL语句优化策略

    目录 索引 什么是索引 索引的创建与删除 创建索引 删除索引 索引的使用 使用explain分析SQL语句 最佳左前缀 索引覆盖 避免对索引列进行额外运算 SQL语句优化 小表驱动大表 索引 什么是索 ...