Solution -「洛谷 P6156」简单题
Description
Link.
求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^kf(\gcd(i,j))\gcd(i,j)\)。
Solution
\textbf{ANS}&=\sum_{i=1}^{n}\sum_{j=1}^{n}(i+j)^{k}\mu^{2}(\gcd(i,j))\gcd(i,j) \\
&=\sum_{d=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}(i+j)^{k}\mu^{2}(d)d[\gcd(i,j)=d] \\
&=\sum_{d=1}^{n}d^{k+1}\times\mu^{2}(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}(i+j)^{k}\sum_{h|i,h|j}\mu(h) \\
&=\sum_{d=1}^{n}d^{k+1}\times\mu^{2}(d)\sum_{h=1}^{\lfloor\frac{n}{d}\rfloor}\mu(h)\times h^{k}\times\sum_{i=1}^{\lfloor\frac{n}{dh}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{dh}\rfloor}(i+j)^{k} \\
&=\sum_{d=1}^{n}d^{k+1}\times\mu^{2}(d)\sum_{h=1}^{\lfloor\frac{n}{d}\rfloor}\mu(h)\times h^{k}\times\sum_{i=1}^{\lfloor\frac{n}{dh}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{dh}\rfloor}(i+j)^{k} \\
\end{aligned} \\
\]
前面两个和式里面显然能算,考虑怎么对于 \(x\) 算 \(\sum_{i=1}^{x}\sum_{j=1}^{x}(i+j)^{k}\)。考虑对其差分:
\left(\sum_{i=1}^{x+1}\sum_{j=1}^{x+1}(i+j)^{k}\right)-\left(\sum_{i=1}^{x}\sum_{j=1}^{x}(i+j)^{k}\right)&=\sum_{i=1}^{x}\sum_{j=1}^{x+1}(i+j)^{k}+\sum_{i=1}^{x+1}(x+1+i)^{k}-\sum_{i=1}^{x}\sum_{j=1}^{x}(i+j)^{k} \\
&=\sum_{i=1}^{x}\left(\sum_{j=1}^{x+1}(i+j)^{k}-\sum_{j=1}^{x}(i+j)^{k}\right)+\sum_{i=1}^{x+1}(x+1+i)^{k} \\
&=\sum_{i=1}^{x}(x+1+i)^{k}+\sum_{i=1}^{x+1}(x+1+i)^{k} \\
\end{aligned}
\]
然后滚个前缀和就可以算了。
#include<bits/stdc++.h>
typedef long long LL;
const int MOD=998244353;
int norm( LL x ) {
if( x<0 ) {
x+=MOD;
}
if( x>=MOD ) {
x%=MOD;
}
return x;
}
int n,k,ans;
int qpow( int bas,int fur ) {
int res=1;
while( fur ) {
if( fur&1 ) {
res=norm( LL( res )*bas );
}
bas=norm( LL( bas )*bas );
fur>>=1;
}
return norm( res+MOD );
}
std::tuple<std::vector<int>,std::vector<int>> makePrime( int n ) {
std::vector<int> prime,tag( n+1 ),mu( n+1 ),pw( n+1 );
pw[0]=1;
mu[1]=pw[1]=1;
for( int i=2;i<=n;++i ) {
if( !tag[i] ) {
mu[i]=norm( -1 );
prime.emplace_back( i );
pw[i]=qpow( i,k );
}
for( int j=0;j<int( prime.size() ) && i*prime[j]<=n;++j ) {
tag[i*prime[j]]=1;
pw[i*prime[j]]=norm( LL( pw[i] )*pw[prime[j]] );
if( i%prime[j]==0 ) {
mu[i*prime[j]]=0;
break;
} else {
mu[i*prime[j]]=norm( -mu[i] );
}
}
}
return std::tie( mu,pw );
}
int main() {
LL tmp;
scanf( "%d %lld",&n,&tmp );
k=tmp%( MOD-1 );
std::vector<int> mu,pw,prt( n+1 ),exprt( n+1 ),preSum( n+1 );
// prt: i^(k+1)*mu^2(i)
// exprt: mu(i)*i^k
// preSum sum sum (i+j)^k
std::tie( mu,pw )=makePrime( n<<1|1 );
for( int i=1;i<=n;++i ) {
prt[i]=norm( prt[i-1]+norm( LL( norm( LL( norm( LL( mu[i] )*mu[i] ) )*pw[i] ) )*i ) );
exprt[i]=norm( exprt[i-1]+norm( LL( mu[i] )*pw[i] ) );
}
for( int i=1;i<=( n<<1 );++i ) {
pw[i]=norm( pw[i]+pw[i-1] );
}
for( int i=1;i<=n;++i ) {
preSum[i]=norm( norm( preSum[i-1]+norm( pw[i<<1]-pw[i] ) )+norm( pw[(i<<1)-1]-pw[i] ) );
}
for( int l=1,r;l<=n;l=r+1 ) {
r=n/( n/l );
int tmp=0;
for( int exl=1,exr,m=n/l;exl<=m;exl=exr+1 ) {
exr=m/( m/exl );
tmp=norm( tmp+norm( LL( norm( exprt[exr]-exprt[exl-1] ) )*preSum[m/exl] ) );
}
ans=norm( ans+LL( norm( prt[r]-prt[l-1] ) )*tmp );
}
printf("%d\n",ans);
return 0;
}
Solution -「洛谷 P6156」简单题的更多相关文章
- Solution -「洛谷 P4372」Out of Sorts P
\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...
- 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛
题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\] ...
- Note/Solution -「洛谷 P5158」「模板」多项式快速插值
\(\mathcal{Description}\) Link. 给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...
- Solution -「洛谷 P5827」点双连通图计数
\(\mathcal{Description}\) link. 求有 \(n\) 个结点的点双连通图的个数,对 \(998244353\) 取模. \(n\le10^5\). \(\mat ...
- Solution -「洛谷 P6158」封锁
\(\mathcal{Description}\) Link. 给定一个 \(n\times n\) 的格点图,横纵相邻的两格点有一条边权为二元组 \((w,e)\) 的边.求对于 \(S=( ...
- Solution -「洛谷 P4198」楼房重建
\(\mathcal{Description}\) Link. 给定点集 \(\{P_n\}\),\(P_i=(i,h_i)\),\(m\) 次修改,每次修改某个 \(h_i\),在每次修改后 ...
- Solution -「洛谷 P6577」「模板」二分图最大权完美匹配
\(\mathcal{Description}\) Link. 给定二分图 \(G=(V=X\cup Y,E)\),\(|X|=|Y|=n\),边 \((u,v)\in E\) 有权 \(w( ...
- Solution -「洛谷 P6021」洪水
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...
- Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集. \(n,m\le10^5 ...
- Solution -「洛谷 P5236」「模板」静态仙人掌
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的仙人掌,\(q\) 组询问两点最短路. \(n,q\le10^4\),\(m\ ...
随机推荐
- 统信UOS系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12.8
前言 上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到自己编译的Qt,所以本篇如何在统信UOS系统上编译Qt5.12.8源码. 统信UOS系统版本 系统版本: Qt源码下载 ...
- STL-deque(ACM)
1.两段都可以插入和删除(头 插入删除 尾 插入删除) 普通队列无法用pop_back()删除队列最后的元素,类似地,由于普通队列只能插入头删除,所以push().pop()无需带_front()._ ...
- 2023-06-16:给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。 所谓「表现良好的时间
2023-06-16:给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数. 我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」. 所谓「表现良好的时间 ...
- MAMP VirtualHost 无效 配置踩坑
目录 Mac系统 MAMP Apache 多虚拟主机配置无效 最终解决: 注意事项: Mac系统 MAMP Apache 多虚拟主机配置无效 和在linux.windows类似,起初添加了一个 < ...
- 使用Python接口自动化测试post请求和get请求,获取请求返回值
引言我们在做python接口自动化测试时,接口的请求方法有get,post等:get和post请求传参,和获取接口响应数据的方法: 请求接口为Post时,传参方法我们在使用python中request ...
- CH32V003使用ADC八通道转换注意事项
本文以CH32V003_F4P6(20Pin)为模板 1.PA1.PA2为外部晶振输入引脚,同时也是ADC的CH1与CH0,所以需要先在system_ch32v00x.c文件中更改为内部48M的宏即可 ...
- 【转载】Linux虚拟化KVM-Qemu分析(十)之virtio驱动
原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...
- PDF转换OFD(Java实用版)
前言: 在项目中用到了,就写一下哈 OFD简介 百度百科:https://baike.baidu.com/item/OFD/56227163?fr=aladdin OFD(Open Fixed-lay ...
- Mapbox—geocoder搜索地点error eaching the server
Mapbox-geocoder搜索地点error eaching the server --There was an errorr eaching the server 环境说明: vue3.3.4 ...
- 面霸的自我修养:JMM与锁的理论
王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是<面霸的自我修养>的第二弹,内容是 Java 并发编程中关于 Java 内存模型(Ja ...