\(\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);
}

最新文章

  1. TFS二次开发系列:六、TFS的版本控制
  2. DB2 上copy表结构及数据
  3. [php-src]窥探Php内核中的变量
  4. Java for LeetCode 037 Sudoku Solver
  5. UIImage 调整图片大小
  6. Linux C 程序 空语句-gcc编译命令(SIX)
  7. lua字符匹配
  8. 解决LINUX vncserver 启动 could not open default font &amp;#39;fixed&amp;#39;错.
  9. Linux~其实shell脚本也很简单
  10. 极客时间 深入拆解java虚拟机 一至三讲学习总结
  11. leetcode268缺失数字
  12. px转换成bp单位的工具函数
  13. ansible学习笔记一
  14. vue监听路由的变化,跳转到同一个页面时,Url改变但视图未重新加载问题
  15. Android Studio 版本间区别
  16. -webkit-margin-before
  17. 【Linux】在线求助man page与info page
  18. SonarQube4.4+Jenkins进行代码检查实例之三-单元測试分析
  19. DB2 9.5 数据库分区管理及应用实践
  20. 20分钟成功编写bootstrap响应式页面 就这么简单

热门文章

  1. MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping
  2. 1.2 Hadoop简介-hadoop-最全最完整的保姆级的java大数据学习资料
  3. python安装清华源
  4. 教你几个 Java 编程中的奇技淫巧
  5. 编程思想的转变 软件开发目录规范 collections、time、datetime、 random模块
  6. vulnhub靶场之DARKHOLE: 1
  7. JuiceFS CSI Driver 常见问题排查指南
  8. xshell+Xftp下载
  9. 痞子衡嵌入式:低功耗&amp;高性能边缘人工智能应用的新答案 - MCXN947
  10. Java基础类String学习分析