题目

众所周知,除数个数函数\(\sigma_0=I^2\),\(I\)就是狄利克雷卷积里的\(1\)函数

于是熟悉狄利克雷卷积的话很快就能看出我们要求的就是\(I\times I^{k}\),即\(I^{k+1}\),我们给这个函数起一个名字叫\(f^{k+1}\)

显然这个东西是积性函数,于是我们考虑一下指数次幂的\(f\)如何求

显然

\[f^{k+1}(n)=\sum_{d|n}f^{k}(d)
\]

对于指数次幂\(p^m\)

\[f^{k+1}(p^m)=\sum_{i=0}^mf^k(p^i)
\]

我们考虑一下快速求\(f^{k+1}(p^m)\),发现就是就是把这\(m\)次幂分配到\(k+1\)次减少的机会里去,当然最后不一定减少到\(0\),于是等价于把\(m\)个球分给\(k+2\)个盒子,允许为空,插板一下得知这个是\(\binom{k+m+1}{m+1}\),我们发现这个组合数非常好算,于是直接暴力就好了,由于又是积性函数,我们分解质因数之后直接合并就可以了

代码

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register
#define min std::min
#define LL long long
const int maxn=1e7+5;
const int mod=998244353;
int f[maxn],p[maxn>>2],inv[505];
LL n,m;int T,ans=1;
inline int C(LL n,int m) {
int now=1;
for(re int i=n;i>=n-m+1;--i) now=1ll*now*(i%mod)%mod;
for(re int i=1;i<=m;i++) now=1ll*now*inv[i]%mod;
return now;
}
int main() {
scanf("%lld%lld",&n,&m);inv[1]=1;
for(re int i=2; i<505; i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
f[1]=1;T=std::sqrt(n)+1;T=min(T,maxn-1);
for(re int i=2;i<=T;i++) {
if(!f[i]) p[++p[0]]=i;
for(re int j=1;j<=p[0]&&p[j]*i<=T;j++) {
f[p[j]*i]=1;
if(i%p[j]==0) break;
}
}
p[++p[0]]=1e9+7,p[++p[0]]=998244353,p[++p[0]]=1e9+9;
for(re int i=1;i<=p[0];i++) {
int t=0;
while(n%p[i]==0) n/=p[i],t++;
if(!t) continue;
ans=1ll*ans*C((t+m+1)%mod,t)%mod;
}
if(n!=1) ans=1ll*ans*C(m+2,1)%mod;
printf("%d\n",ans);
return 0;
}

【LGP4714】「数学」约数个数和的更多相关文章

  1. 洛谷 P4714 「数学」约数个数和 解题报告

    P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点 ...

  2. luogu 6月月赛 E 「数学」约数个数和

    题面在这里! 第一眼感觉炒鸡水啊...只要把N质因数分解一下,因为k次约数相当于求k+2元一次方程的非负整数解,所以答案就是和每个质因子指数有关的一些组合数乘起来. 但是要用pillard's rho ...

  3. P4714 「数学」约数个数和

    题解: 会了Miller-Rabin这题就很简单了 首先这种题很容易想到质因数分解 但是暴力根号算法是不行的 所以要用到 Miller-Rabin素数 https://blog.csdn.net/lt ...

  4. 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」

    题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_ ...

  5. 「10.8」simple「数学」·walk「树上直径」

    A. Simple 本来以为很难,考场瞎推了推好像会了...... 想起小凯的诱惑,迷?? 首先$n$,$m$,$q$同除$gcd(n,m)$,显然$q$以内的数假如不是$gcd$的倍数,那么一定不能 ...

  6. Codeforces 626E Simple Skewness 「数学」「二分」

    题意: 给你一堆无序数,寻找它的一个子堆,使得子堆的平均数减中位数最大. 数字的个数n<=2e5 0<=xi<=1e6. 思路: 首先可以证明这堆数一定是奇数个,证明方法是尝试在奇数 ...

  7. Loj 3058. 「HNOI2019」白兔之舞

    Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\l ...

  8. 「MoreThanJava」计算机发展史—从织布机到IBM

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  9. 「MoreThanJava」一文了解二进制和CPU工作原理

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

随机推荐

  1. VS开发工具的常用插件【转载】

    文章转载自https://www.cnblogs.com/huntergu/p/8337266.html

  2. [JZOJ 5860] 荒诞

    思路: 头皮发麻的操作... 理解一下题意会发现:排名为\(i\)的前缀正好是第\(i\)个前缀. 所以问题就变成了求\(1->len\)的平方和,注意取模即可. #include <bi ...

  3. CVE-2019-0708简单复现

    各文件对应位置 rdp.rb -> /usr/share/metasploit-framework/lib/msf/core/exploit/rdp.rb rdp_scanner.rb -> ...

  4. dubbo jar 配置文件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. shell 命令 文件查看ls,复制cp,移动mv,查看文件内容cat more less,查看文件信息 file

    1. 查看文件 ls        ls -l  查看文件详细信息 ls -a 查看所有文件(包含隐藏文件) ls -lh  带单位显示文件大小 ls -i  查看文件的节点号(相当身份证唯一)  2 ...

  6. 前端常用的库和实用技术之JavaScript 模块化

    模块化概念 AMD是requirejs在推广过程中对模块化定义的规范化产出. 异步加载模块,依赖前置,提前执行 Define定义模块define(['require','foo'],function( ...

  7. css---flex布局--容器

    http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 容器设置 新版的为display为flex    ...

  8. NOI2019网络同步赛总结

    先说说分数:\(100+20+0+100+0+0=220\) 我果然还是个大蒟蒻-- Day1 比赛之前还在回顾着<灵笼>,时间一到就立刻进入比赛. 快速地浏览了一遍题目,然后开始刚T1. ...

  9. Windows 开启win32 控制台

    {     AllocConsole();     FILE *Journal = NULL;     freopen_s(&Journal, "CONOUT$", &qu ...

  10. Orika JavaBean映射工具探秘

    Orika是一个简单.快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器. 关于: 作为开发人员,我们必须为业务问题提供解决方案,我们希望利用我们的时间来做真正重 ...