【LGP4714】「数学」约数个数和
众所周知,除数个数函数\(\sigma_0=I^2\),\(I\)就是狄利克雷卷积里的\(1\)函数
于是熟悉狄利克雷卷积的话很快就能看出我们要求的就是\(I\times I^{k}\),即\(I^{k+1}\),我们给这个函数起一个名字叫\(f^{k+1}\)
显然这个东西是积性函数,于是我们考虑一下指数次幂的\(f\)如何求
显然
\]
对于指数次幂\(p^m\)
\]
我们考虑一下快速求\(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】「数学」约数个数和的更多相关文章
- 洛谷 P4714 「数学」约数个数和 解题报告
P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点 ...
- luogu 6月月赛 E 「数学」约数个数和
题面在这里! 第一眼感觉炒鸡水啊...只要把N质因数分解一下,因为k次约数相当于求k+2元一次方程的非负整数解,所以答案就是和每个质因子指数有关的一些组合数乘起来. 但是要用pillard's rho ...
- P4714 「数学」约数个数和
题解: 会了Miller-Rabin这题就很简单了 首先这种题很容易想到质因数分解 但是暴力根号算法是不行的 所以要用到 Miller-Rabin素数 https://blog.csdn.net/lt ...
- 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」
题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_ ...
- 「10.8」simple「数学」·walk「树上直径」
A. Simple 本来以为很难,考场瞎推了推好像会了...... 想起小凯的诱惑,迷?? 首先$n$,$m$,$q$同除$gcd(n,m)$,显然$q$以内的数假如不是$gcd$的倍数,那么一定不能 ...
- Codeforces 626E Simple Skewness 「数学」「二分」
题意: 给你一堆无序数,寻找它的一个子堆,使得子堆的平均数减中位数最大. 数字的个数n<=2e5 0<=xi<=1e6. 思路: 首先可以证明这堆数一定是奇数个,证明方法是尝试在奇数 ...
- Loj 3058. 「HNOI2019」白兔之舞
Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\l ...
- 「MoreThanJava」计算机发展史—从织布机到IBM
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 「MoreThanJava」一文了解二进制和CPU工作原理
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
随机推荐
- Batch - forfiles 命令详解
forfiles 命令详解 C:\Users\cuixunxu>forfiles /? FORFILES [/P pathname] [/M searchmask] [/S] [/C comma ...
- DataWorks2.0的“业务流程”与1.0的“工作流”的对比
DatwWorks终于升级2.0了,心情万分激动之余,又有一丝担忧.因为,没法再创建新的旧版工作流了...新版抛弃了“工作流”这个概念,引入了“业务流程”和“解决方案”两个新的概念.于是,作为团队Le ...
- linux源码安装python及pip和django
1安装编译工具 yum install zlib-devel bzip2-devel openssl-devel python-devel kernel-devel libffi-devel ncur ...
- mysql复制以及一主多从等常见集群概述
1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的 数据复制到其它主机(slaves)上,并 ...
- unity 移动
上下左右平移 void Start() { QualitySettings.vSyncCount = ; Application.targetFrameRate = ;//控制帧数 } // Upda ...
- SpringBoot通过maven打包成jar,设定主清单属性。
文章目录 原来普通的jar包一直是 <build> <plugins> <plugin> <groupId>org.apache.maven.plugi ...
- [21]APUE:线程同步之记录锁(文件)
[a] 概念 建议锁:在遵循相同记录锁规则的进程/线程间生效,通常用于保证某个程序自身多个进程/线程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后 ...
- solr 如何实现精确查询
第一条和第三条不应该出现的. 解决办法
- 将Mysq数据导入solr索引库
本文的基础环境都是在centos 64bit,jdk1.7.79 将mysql 的jar 包添加到/home/hadoop/cloudsolr/solr-4.10.4/contrib/dataimpo ...
- Hadoop节点集群挂了,Hbase数据源损坏怎么办
今天集群节点一下子挂了5台,hbase的数据块也损坏. hadoop日志 .0.15:36642 dest: /ip:50010 2014-08-26 15:01:14,918 WARN org.ap ...