题解

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的更多相关文章

  1. 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 ...

  2. 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 ...

  3. codeforces757E. Bash Plays with Functions(狄利克雷卷积 积性函数)

    http://codeforces.com/contest/757/problem/E 题意 Sol 非常骚的一道题 首先把给的式子化一下,设$u = d$,那么$v = n / d$ $$f_r(n ...

  4. Codeforces E. Bash Plays with Functions(积性函数DP)

    链接 codeforces 题解 结论:\(f_0(n)=2^{n的质因子个数}\)= 根据性质可知\(f_0()\)是一个积性函数 对于\(f_{r+1}()\)化一下式子 对于 \[f_{r+1} ...

  5. CF 757E Bash Plays with Functions——积性函数+dp+质因数分解

    题目:http://codeforces.com/contest/757/problem/E f0[n]=2^m,其中m是n的质因子个数(种类数).大概是一种质因数只能放在 d 或 n/d 两者之一. ...

  6. CF 757 E Bash Plays with Functions —— 积性函数与质因数分解

    题目:http://codeforces.com/contest/757/problem/E 首先,f0(n)=2m,其中 m 是 n 的质因数的种类数: 而且 因为这个函数和1卷积,所以是一个积性函 ...

  7. 【codeforces 757E】Bash Plays with Functions

    [题目链接]:http://codeforces.com/problemset/problem/757/E [题意] 给你q个询问; 每个询问包含r和n; 让你输出f[r][n]; 这里f[0][n] ...

  8. [Codeforces 757E] Bash Plays with Functions (数论)

    题目链接: http://codeforces.com/contest/757/problem/E?csrf_token=f6c272cce871728ac1c239c34006ae90 题目: 题解 ...

  9. 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 ...

随机推荐

  1. linux下编译protobuf

    这里我介绍两种方法,一是直接ccmake配置,二是修改cmake文件下面的CMakeList.txt文件 第一种方法:配置ccmake 1.安装sudo apt-get install cmake-c ...

  2. windows下QT打包

    1.找到对应的MinGW命令,打开 2.进入exe目录 3.执行windeployqt XX.exe

  3. 关于.net中的DataSet和DataTable

    DataSet ds = new DataSet(); ds.Tables.Add(); ds.Tables[].Columns.Add("name"); ds.Tables[]. ...

  4. vmware station-ubuntu18.04 共享剪贴板

    辞职在家休息,买了台新电脑,装个虚拟机,安装visual studio, android studio, qt, everything, noptepad++,hbuilder,ditto,xx-ne ...

  5. LeetCode算法题-Find Mode in Binary Search Tree(Java实现)

    这是悦乐书的第246次更新,第259篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第113题(顺位题号是501).给定具有重复项的二叉搜索树(BST),找到给定BST中的 ...

  6. 英语口语练习系列-C22-吃东西

    基础词汇 1. bill [bɪl] n. 账单:钞票:法案:鸟嘴 Bill (人名)比尔 pay the bill 付账单 telephone bill 话费单 electricity bill 电 ...

  7. Docker(1):CentOS7 安装Docker

    1.查看系统内核,docker要求系统的内核版本高于3.10 #  uname -r 2.升级yum包,确保最新 #   yum update 3.安装所需要依赖包 #   yum install - ...

  8. Linux:Day13(上) CentOS系统启动流程

    CentOS 5和6的启动流程 Linux:kernel+rootfs kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: glibc 库:函数集合,functi ...

  9. mysql 提高一 动态sql 传变量

    1.需求 DELIMITER $$ SECOND STARTS '2018-09-07 08:00:00' ON COMPLETION PRESERVE ENABLE DO BEGIN ) DEFAU ...

  10. Spring boot整合Mybatis

    时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了.闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主 ...