CF757E Bash Plays with Functions
题解
q<=1e6,询问非常多。而n,r也很大,必须要预处理所有的答案,询问的时候,能比较快速地查询。
离线也是没有什么意义的,因为必须递推。
先翻译$f_0(n)$
$f_0(n)=\sum_d|n[(d,\frac{n}{d})=1]$
一个数的约数和约数的另一半互质,那么,必须意味着,对于n的每个质因子,要么全在d,要么全在n/d否则就不互质了,就是0
对于互质时,每个质因子有两种选择情况,
所以,f0就是$2^m$其中,m是n的质因子种类数。
然后还要处理fr的递推式。
发现,还是和n的约数有关,反过来考虑每个约数的贡献,发现每个约数会被计算两次,u,v各一次
而还要除以2,正好消掉
那么,其实$f_r(n)=\sum_{d|n}f_{r-1}(d)$
这个是什么呢?$f_r(n)=f_{r-1}*1$($*$表示卷积)
$f_0$是积性函数显然,
而卷积两侧是积性函数,那么卷积之后也是积性函数的。
所以,递推过去,$f_r$都是积性函数了。
所以,处理$f_r$可以把每个质因子分开考虑。
$f_r(n)=\Pi_{i=1}^k\space f_{r-1}(p_i^{q_i})$
$f_r(p_1^{q_1})=\sum_{d|{p_1^{q_1}}}f_{r-1}(d)=\sum_{k=1}^{q_1}f_{r-1}(p_1^{k})$
可以发现,如果递推到$f_0$的话,那么,就和质因子p1是什么,没有任何关系了。
所以,之后的取值,和p1是什么质因子,也没有关系。
只和p1的次数有关。
所以可以dp[i][j]第i层,次数为j的$f_i(j)$的值。
前缀和优化一下即可。
但是对于1e6次输入的数,怎么快速质因数分解呢?
假装你要线性筛素数,然后你可以顺便筛出mindiv(一个数的最小质因子)
然后,可以每次除掉mindiv,记录一下这个mindiv的次数。
即可利用mindiv,logn质因数分解
代码:
#include<bits/stdc++.h>
#define numb (ch^'0')
#define ri register int
using namespace std;
typedef long long ll;
const int N=+;
const int mod=1e9+;
int q,r,n;
int pri[N],cnt;
int mindiv[N];
ll f[N][],sum[];
bool vis[N];
void rd(int &x){
x=;char ch;
while(!isdigit(ch=getchar()));
for(x=numb;isdigit(ch=getchar());x=(x<<)+(x<<)+numb);
}
void sieve(){
mindiv[]=;//warning!!
for(int i=;i<=N-;i++){
if(!vis[i]){
pri[++cnt]=i;
mindiv[i]=i;
}
for(int j=;j<=cnt;j++){
if(pri[j]*i>N-) break;
vis[pri[j]*i]=;
mindiv[pri[j]*i]=pri[j];
if(i%pri[j]==) break;
}
}
}
int main(){
sieve();
f[][]=;
sum[]=;
for(int i=;i<=;i++) f[][i]=,sum[i]=sum[i-]+f[][i];
for(ri i=;i<=N-;i++){
for(int j=;j<=;j++){
f[i][j]=sum[j];
sum[j]=;
if(j)sum[j]=sum[j-];
(sum[j]+=f[i][j])%=mod;
}
}
int t;
rd(t);
while(t--){
rd(r),rd(n);
ll ans=;
while(n!=){
ll div=mindiv[n];
int cnt=;
while(mindiv[n]==div) cnt++,n/=mindiv[n];
(ans*=f[r][cnt])%=mod;
}
printf("%lld\n",ans);
}
return ;
} /*
Author: *Miracle*
Date: 2018/10/3 22:15:15
*/
总结:
1.对于1e6的询问,必然要考虑探究性质,O(1)处理询问。
2.积性函数的证明:
①从实际意义考虑,如$f_0$
②直接理性证明,如$f_r$
这个是利用了卷积的性质
有时要考虑的是分开质因子能不能处理。
CF757E Bash Plays with Functions的更多相关文章
- Codeforces 757 E Bash Plays with Functions
Discription Bash got tired on his journey to become the greatest Pokemon master. So he decides to ta ...
- Codeforces757E.Bash Plays With Functions(积性函数 DP)
题目链接 \(Description\) q次询问,每次给定r,n,求\(F_r(n)\). \[ f_0(n)=\sum_{u\times v=n}[(u,v)=1]\\ f_{r+1}(n)=\s ...
- codeforces757E. Bash Plays with Functions(狄利克雷卷积 积性函数)
http://codeforces.com/contest/757/problem/E 题意 Sol 非常骚的一道题 首先把给的式子化一下,设$u = d$,那么$v = n / d$ $$f_r(n ...
- Codeforces E. Bash Plays with Functions(积性函数DP)
链接 codeforces 题解 结论:\(f_0(n)=2^{n的质因子个数}\)= 根据性质可知\(f_0()\)是一个积性函数 对于\(f_{r+1}()\)化一下式子 对于 \[f_{r+1} ...
- CF 757E Bash Plays with Functions——积性函数+dp+质因数分解
题目:http://codeforces.com/contest/757/problem/E f0[n]=2^m,其中m是n的质因子个数(种类数).大概是一种质因数只能放在 d 或 n/d 两者之一. ...
- CF 757 E Bash Plays with Functions —— 积性函数与质因数分解
题目:http://codeforces.com/contest/757/problem/E 首先,f0(n)=2m,其中 m 是 n 的质因数的种类数: 而且 因为这个函数和1卷积,所以是一个积性函 ...
- 【codeforces 757E】Bash Plays with Functions
[题目链接]:http://codeforces.com/problemset/problem/757/E [题意] 给你q个询问; 每个询问包含r和n; 让你输出f[r][n]; 这里f[0][n] ...
- [Codeforces 757E] Bash Plays with Functions (数论)
题目链接: http://codeforces.com/contest/757/problem/E?csrf_token=f6c272cce871728ac1c239c34006ae90 题目: 题解 ...
- Bash Plays with Functions CodeForces - 757E (积性函数dp)
大意: 定义函数$f_r(n)$, $f_0(n)$为pq=n且gcd(p,q)=1的有序对(p,q)个数. $r \ge 1$时, $f_r(n)=\sum\limits_{uv=n}\frac{f ...
随机推荐
- windows下QT打包
1.找到对应的MinGW命令,打开 2.进入exe目录 3.执行windeployqt XX.exe
- Git在商业项目中的使用流程
一 引言 这一篇文章还是记录我在杭州工作的总结. 我刚来公司的时候,对Git的使用很头痛,因为在学校里面很少用这个东西,即使用,一般也只有一个分支,不会出现代码冲突和代码合并的情况.但是公司里面一个项 ...
- Windows 更快捷方便的安装软件,命令提示符上安装 Chocolatey
在命令提示符上安装 Chocolatey @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-o ...
- USB初学(一)---USB-HID的初步认识【转】
HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容. USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备.那什么是设 ...
- 如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量
概述: 本地化是系统或软件运行的语言和文化环境.设置NLS_LANG环境参数是规定Oracle数据库软件本地化行为最简单的方式. NLS_LANG参数不但指定了客户端应用程序和Oracle数据库所使用 ...
- 闭包函数&回调函数
闭包函数&回调函数 谈到回调函数,不得不提匿名函数;匿名函数,也叫闭包函数,也就是没有名字的函数,它可以单独存在,也可以将其赋值给某一个变量.so,先来看一下闭包函数. 闭包函数 php文档: ...
- 在Visual Studio 2017上配置Glut
在Visual Studio 2017上配置Glut 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在Visual Studio 2017上配置并使用 ...
- LivePhoto开发,你要知道的知识点
前言 Apple从iPhone6s开始支持Live Photo.Live Photo 会录下拍照前后 1.5 秒所发生的一切,因此用户获得的不仅仅是一张精美照片,还有拍照前后时刻的动作和声音.具体的操 ...
- Ubuntu 14.04 结束支持该如何应对?
Ubuntu 14.04 即将于 2019 年 4 月 30 日结束支持.这意味着在此日期之后 Ubuntu 14.04 用户将无法获得安全和维护更新. 你甚至不会获得已安装应用的更新,并且不手动修改 ...
- nginx与fastdfs配置详解与坑
nginx与fastdfs配置详解与坑 环境 ubantu19.04 fastdfs-5.11 fastdfs-nginx-module-1.20 libfastcommon-1.0.39 nginx ...