LG P6156 简单题
\(\text{Problem}\)


\(\text{Analysis}\)
显然 \(f=\mu^2\)
那么
\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_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\) 差分
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 简单题的更多相关文章
- 洛谷 P6222 - 「P6156 简单题」加强版(莫比乌斯反演)
原版传送门 & 加强版传送门 题意: \(T\) 组数据,求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\g ...
- BZOJ 2683: 简单题
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 913 Solved: 379[Submit][Status][Discuss] ...
- 【BZOJ-1176&2683】Mokia&简单题 CDQ分治
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
- Bzoj4066 简单题
Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 2185 Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...
- Bzoj2683 简单题
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
- 这样leetcode简单题都更完了
这样leetcode简单题都更完了,作为水题王的我开始要更新leetcode中等题和难题了,有些挖了很久的坑也将在在这个阶段一一揭晓,接下来的算法性更强,我就要开始分专题更新题目,而不是再以我的A题顺 ...
- [BZOJ2683][BZOJ4066]简单题
[BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...
- HDU 1753 大明A+B(字符串模拟,简单题)
简单题,但要考虑一些细节: 前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出 然后处理起来就比较麻烦了. 题目链接 我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜 ...
- 团体程序设计天梯赛-练习集L1-014. 简单题
L1-014. 简单题 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 这次真的没骗你 —— 这道超级简单的题目没有任何输入. ...
- bzoj 4066: 简单题 kd-tree
4066: 简单题 Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 234 Solved: 82[Submit][Status][Discuss] De ...
随机推荐
- 解决Emma中文乱码
vim -/.emma/emmarc 找到 db_encoding=latin1 改为 db_encoding=utf8 然后重新运行emma,此时发现还是乱码,不要着急,在执行所有的sql语句之前加 ...
- 漫谈计算机网络:网络层 ------ 重点:IP协议与互联网路由选择协议
面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...
- 数据结构高阶--AVL(平衡二叉树)(图解+实现)
AVL树(平衡二叉树) 概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下.因此为了解决这个问题,两位俄罗斯的数学家发明 ...
- @Transactional注解事务失效的几种场景及原因
1. 介紹 在业务开发的许多场景中,我们会使用到通过事务去控制多个操作的一致性.比较多的就是通过声明式事务,即使用 @Transactional 注解修饰方法的形式.但在使用过程中,要足够了解事务失效 ...
- 东拼西凑学java
前言 随着大环境的影响,互联网寒冬降临,程序员的日子越来越难,搞不好哪天就被噶了,多学点东西也没啥坏处,国内市场java如日中天,出门在外不会写两行java代码,都不好意思说自己是程序员,伪装成一个萌 ...
- 04-CURD
Insert @Test//测试插入 public void insertTest(){ User user = new User(); user.setName("wsk"); ...
- P1024 [NOI2001] 食物链【种类并查集】
题意 P1024 简化题意:给定 \(n\) 和 \(k(n\leqslant5\times10^4,k\leqslant10^5)\) ,表示有 \(n\) 个动物, \(k\) 个描述,其中: \ ...
- MongoDB - 分片简介
简介 什么是分片 高数据量和高吞吐量的数据库应用会对单机的性能造成较大压力,大的查询会将单机的 CPU 耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存压力转移到磁盘 IO 上. 为了解决这 ...
- S2-032 CVE-2016-3081 远程代码执行
漏洞名称 CVE-2016-3081 S2-032 远程代码执行 利用条件 Struts 2.3.20 - Struts Struts 2.3.28 ( 2.3.20.3 和 2.3.24.3 除外) ...
- 微服务框架——MybatisPlus
MybatisPlus 一.快速入门 1.mybatisPlus特性 无侵入:只增强,不改变. 损耗小:启动的时候直接注入基本CRUD 强大的CRUD操作:提供通用Mapper,通用service,条 ...