洛谷 P6060 - [加油武汉]传染病研究(数论)
一道不算太难的题,题解稍微写写吧(
首先根据约数个数和公式,对于一个 \(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;
}
洛谷 P6060 - [加油武汉]传染病研究(数论)的更多相关文章
- 洛谷P6060 [加油武汉]传染病研究
一道不错的数学题 Solution 看到约数个数就想到枚举约数,但对于每个询问都枚举显然不现实,但是我们可以将大致的方向锁定在这方面,是否可以预处理出一定的东西,然后低复杂度询问呢? 我们想到预处理出 ...
- E 洛谷 P3598 Koishi Loves Number Theory[数论]
题目描述 Koishi十分喜欢数论. 她的朋友Flandre为了检测她和数论是不是真爱,给了她一个问题. 已知 给定和个数,求对取模. 按照套路,呆萌的Koishi当然假装不会做了,于是她来向你请教这 ...
- 洛谷P3158 放棋子 [CQOI2011] dp+数论
正解:dp+数论 解题报告: 传送门! 考虑对每种颜色的棋子单独考虑鸭,那显然有,当某一行或某一列已经被占据的时候,那一行/一列就不能再放别的颜色的棋子了,相当于直接把那一行/一列直接消了 显然就能考 ...
- 洛谷P4495 奇怪的背包 [HAOI2018] 数论
正解:数论+dp 解题报告: 传送门! 首先看到这题,跳无数次,自然而然可以想到之前考过好几次了的一个结论——如果只考虑无限放置i,它可以且仅可以跳到gcd(p,v[i]) 举一反三一下,如果有多个i ...
- 洛谷P2303 [SDOi2012] Longge的问题 数论
看懂了题解,太妙了TT但是想解释的话可能要很多数学公式打起来太麻烦了TT所以我就先只放代码具体推演的过程我先写在纸上然后拍下来做成图片放上来算辣quq 好的那我先滚去做题了做完这题就把题解放上来.因为 ...
- 洛谷$P5366\ [SNOI2017]$遗失的答案 数论+$dp$
正解:数论$dp$ 解题报告: 传送门$QwQ$ 考虑先质因数分解.所以$G$就相当于所有系数取$min$,$L$就相当于所有系数取$max$ 这时候考虑,因为数据范围是$1e8$,$1e8$内最多有 ...
- 洛谷P4640 王之财宝 [BJWC2008] 数论
正解:容斥+Lucas+组合数学 解题报告: 传送门! 和上一篇题解的题差不多,,,双倍经验趴大概算 还是说下还是有点儿区别的来着$QwQ$ 两个小差别分别港下$QwQ$ 首先有$m-n$件是无穷个的 ...
- 洛谷P3455 ZAP-Queries [POI2007] 莫比乌斯反演+数论分块
正解:莫比乌斯反演 解题报告: 传送门! 首先这题刚看到就很,莫比乌斯反演嘛,和我前面写了题解的那个一模一样的,所以这儿就不讲这前边的做法辣QAQ 但是这样儿还有个问题,就现在已知我每次都是要O(n) ...
- 洛谷P1634 禽兽的传染病 题解
题目传送门 最近都在刷红色的水题... 这道题因为是不断地传染,所以直接求幂次方就好啦... 但是一测样例WA了... 原来x初始需要加1... 提交评测WA了... 原来要开long long .. ...
随机推荐
- 关于keras框架的介绍以及操作使用
Keras 是一个 Python 深度学习框架,可以方便地定义和训练几乎所有类型的深度学习模型.Keras 最开始是为研究人员开发的,其目的在于快速实验.我们可以进入网站主页 - Keras 中文文档 ...
- Golang通脉之方法
方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数.这种特定类型变量叫做接收者(Receiver).接收者的概念就类似于其他语言中的this或者 self. Go 语言中同时 ...
- 《基于SD-SEIR模型的实验室人员不安全行为传播研究》
My Focus:基于SD-SEIR模型的实验室人员不安全行为的传播; 建模与实验仿真 Title: Study on Porpagation of Unsafe Bhavior of Laborat ...
- palindrome-partitioning leetcode C++
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- 访问所有HTTPS网站显示连接不安全 (火狐浏览器)
当 Firefox 连接到一个安全的网站时(网址最开始为"https://"),它必须确认该网站出具的证书有效且使用足够高的加密强度.如果证书无法通过验证,或加密强度过低,Fire ...
- request/response解决中文乱码!!!
Request中文乱码问题以及解决方案 补充三个知识点: Get是URL解码方式.默认解码格式是Tomcat编码格式.所以URL解码是UTF-8,覆盖掉了request容器解码格式 Post是实体内容 ...
- Linux 用户&用户组
用户和用户组的概念 用户 ---> 使用操作系统的人 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系 ...
- Python之模块导入(不看会后悔系列)
看到这个标题猜想大家内心OS: 什么辣鸡水文,划走划走~ 别急有干货! 静态导入(照顾新人) 假设现在有两个文件a,b在不同目录,b文件想引用a文件中的函数: # test_module/sub_mo ...
- NCF 中如何将Function升级到FunctionRender
简介 历史的车轮在不断的向前推进,NCF也在不断的迭代更新,只为成为更好的NCF 如果你之前没有用过NCF可以跳过这个文档,直接去下载最新的NCF源码进行实践. NCF仓库地址:https://git ...
- 用Python实现人像动漫化
用Python实现人像动漫化 本文章会教你如何使用Python实现人像动漫化,先看看效果实例: 实现过程如下: 本案例是使用百度的API来实现的,首先需要进入百度AI开放平台注册账号,具体流程就不讲了 ...