洛谷题面传送门

一道不算太难的题,题解稍微写写吧(

首先根据约数个数和公式,对于一个 \(n=p_1^{\alpha_1}·p_2^{\alpha_2}·\cdots·p_m^{\alpha_m}\)​,显然有 \(D(n^k)=\prod\limits_{i=1}^m(k\alpha_i+1)\)​,由于每次询问给定的 \(k\) 不固定,我们无法一次性直接对所有 \(k\) 都算一波答案。不过注意到对于一个 \(n\in[1,10^7]\) 而言,其质因子个数不会超过 \(8\),这也就启发我们,上面的 \(\prod\) 展开后肯定是关于 \(k\) 的次数不超过 \(8\) 的多项式,因此考虑对每个 \(n\) 求出其对应的多项式的系数然后累加求个前缀和,这样我们即可在 \(\mathcal O(8)\) 的复杂度内回答询问。那么怎么对每个 \(n\) 求出其对应的多项式呢?考虑一个非常 naive 的 DP,首先我们对于每个数求出其最小质因子 \(mnp_i\)——这显然可以一遍线性筛搞定,学过一丁点数论的人都能够搞定。我们再找出 \(mnp_i\) 在 \(i\) 中的次数,假设为 \(\alpha\),那么我们记 \(x=\dfrac{i}{mnp_i^{\alpha}}\),那么显然就有 \(f_{i,j}=f_{x,j-1}·\alpha+f_{x,j}\),其中 \(f_{i,j}\) 为 \(i\) 对应的多项式第 \(j\) 项的系数,随便递推一下即可。

时间复杂度 \(\mathcal O(8·n)\)。这个故事告诉我们下次看到数论题目,有时候也可以从每个数不同质因子个数很小这一点出发,可以获得不错的复杂度。

const int MAXN=1e7;
const int OMEGA=8;
const int MOD=998244353;
int pr[MAXN/10+5],prcnt=0,mnp[MAXN+5],omega[MAXN+5];
bitset<MAXN+5> vis;
int s[MAXN+5][OMEGA+2];
void sieve(int n){
for(int i=2;i<=n;i++){
if(!vis[i]) mnp[i]=i,pr[++prcnt]=i,omega[i]=1;
for(int j=1;j<=prcnt&&pr[j]*i<=n;j++){
vis[i*pr[j]]=1;mnp[i*pr[j]]=pr[j];
if(i%pr[j]==0){omega[i*pr[j]]=omega[i];break;}
omega[i*pr[j]]=omega[i]+1;
}
} s[1][0]=1;
for(int i=2;i<=n;i++){
int tmp=i,sum=0,p=mnp[i];
while(tmp%p==0) tmp/=p,sum++;
for(int j=0;j<=omega[i];j++) s[i][j]=s[tmp][j];
for(int j=0;j<omega[i];j++) s[i][j+1]+=s[tmp][j]*sum;
}
for(int i=0;i<=OMEGA;i++) for(int j=1;j<=n;j++)
s[j][i]=(s[j-1][i]+s[j][i])%MOD;
}
int pw[OMEGA+2];
int main(){
sieve(MAXN);int qu;scanf("%d",&qu);
while(qu--){
int n,k,res=0;scanf("%d%d",&n,&k);
for(int i=(pw[0]=1);i<=OMEGA;i++) pw[i]=1ll*pw[i-1]*k%MOD;
for(int i=0;i<=OMEGA;i++) res=(res+1ll*pw[i]*s[n][i])%MOD;
printf("%d\n",res);
}
return 0;
}

最新文章

  1. 航空货运:运价类别Rate Class
  2. pcm跟.wav文件的关系
  3. 超实用的8个Linux命令行性能监测工具
  4. 使用ffmpeg快速生成视频截图
  5. 【Python笔记】图片处理库PIL的源代码安装步骤
  6. C语言学习之笔记
  7. 符合altium designer操作习惯的cadence快捷键设置
  8. 《Tips for Optimizing C/C++ Code》译文
  9. JS日期时间选择器
  10. Gimp插件Hello world注释
  11. Angular - - ngInclude、ngTransclude
  12. HashMap 实现及原理
  13. PHP判断引入文件是否引入成功
  14. 基于IDEA工具 lombok 的使用
  15. Centos7 安装系统服务、开机自启动
  16. Luffy之支付宝支付开发API
  17. 一、MySQL的连接建立与权限
  18. Java高并发编程(四)
  19. excel 上标和下标
  20. bzoj4236 JOIJOI

热门文章

  1. vue3.x全局插件和组件
  2. 第五课第四周笔记3:Multi-Head Attention多头注意力
  3. 封装一个简单的ajax请求
  4. oo第四单元及期末总结
  5. 基于docker-compose搭建sonarqube代码质量检测平台
  6. FastAPI 学习之路(三十三)操作数据库
  7. Photoshop教程,视频MP4格式转换为GIF格式
  8. 注意 .NET string.GetHashCode() 用法
  9. DH密钥交换
  10. vue中Element-ui样式修改