传送门

首先考虑如果 $n$ 只有一个质因数的情况,即 $n=p^t$

那么显然可以 $dp$ ,设 $f[i][j]$ 表示第 $i$ 步,当前剩下 $p^j$ 的概率

那么转移很简单: $f[i][j]=\sum_{k=j}^{t}\frac{f[i-1][k]}{k+1}$ ,然后可以发现 $f[i][j+1]$ 算的在 $f[i][j]$ 里面都会算到,那么可以把转移优化一下:

$f[i][j]=f[i][j+1]+\frac{f[i-1][j]}{j+1}$ ,然后复杂度就很稳

现在考虑一下 $n=\prod_{i=1}^{m} p_{i} ^ {t_i}$ 的情况,发现直接把每个质数的贡献分别算然后乘起来即可

可以这样考虑,首先概率显然是可以乘起来的,然后发现当两件事情同时发生:剩下 $p_{x} ^ {a}$ 和剩下 $p_{y} ^ {b}$

贡献即为$p_{x} ^ {a} p_{y} ^ {b} $ ,发现刚好也是相乘的,所以直接相乘即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline ll read()
{
ll x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,M=1e4+,mo=1e9+;
inline int fk(int x) { return x>=mo ? x-mo : x; }
ll n,m;
int p[N],cnt[N],inv[N],tot;
int f[M][N],Ans=;
int main()
{
n=read(),m=read();
int T=sqrt(n); ll now=n;
for(int i=;i<=T;i++)
{
if(now%i) continue;
p[++tot]=i; while(now%i==) cnt[tot]++,now/=i;
}
if(now>) p[++tot]=now%mo,cnt[tot]=;
inv[]=;
for(int i=;i<N;i++)
inv[i]=1ll*(mo-mo/i)*inv[mo%i]%mo;
for(int i=;i<=tot;i++)
{
memset(f,,sizeof(f)); f[][cnt[i]]=;
for(int j=;j<=m;j++)
{
f[j][cnt[i]]=1ll*f[j-][cnt[i]]*inv[cnt[i]+]%mo;
for(int k=cnt[i]-;k>=;k--)
f[j][k]=fk(f[j][k+]+1ll*f[j-][k]*inv[k+]%mo);
}
int pw=,res=;
for(int j=;j<=cnt[i];j++)
{
res=fk(res+1ll*f[m][j]*pw%mo);
pw=1ll*pw*p[i]%mo;
}
Ans=1ll*Ans*res%mo;
}
printf("%d\n",Ans);
return ;
}

Codeforces 1097D. Makoto and a Blackboard的更多相关文章

  1. CF 1097D Makoto and a Blackboard

    算是记一下昨天晚上都想了些什么 官方题解   点我 简单题意 给定两个正整数$n$和$k$,定义一步操作为把当前的数字$n$等概率地变成$n$的任何一个约数,求$k$步操作后的期望数字,模$1e9 + ...

  2. CF1097D Makoto and a Blackboard

    题目地址:CF1097D Makoto and a Blackboard 首先考虑 \(n=p^c\) ( \(p\) 为质数)的情况,显然DP: 令 \(f_{i,j}\) 为第 \(i\) 次替换 ...

  3. D Makoto and a Blackboard

    Makoto and a Blackboard time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  4. CodeForces - 1097D:Makoto and a Blackboard (积性)

    Makoto has a big blackboard with a positive integer n written on it. He will perform the following a ...

  5. Makoto and a Blackboard CodeForces - 1097D (积性函数dp)

    大意: 初始一个数字$n$, 每次操作随机变为$n$的一个因子, 求$k$次操作后的期望值. 设$n$经过$k$次操作后期望为$f_k(n)$. 就有$f_0(n)=n$, $f_k(n)=\frac ...

  6. codeforces#1097 D. Makoto and a Blackboard(dp+期望)

    题意:现在有一个数写在黑板上,它以等概率转化为它的一个约数,可以是1,问经过k次转化后这个数的期望值 题解:如果这个数是一个素数的n次方,那么显然可以用动态规划来求这个数的答案,否则的话,就对每个素因 ...

  7. CF 1097D - Hello 2019 D题: Makoto and a Blackboard

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:传送门  Portal  原题目描述在最下面.  给一个数n ...

  8. D. Makoto and a Blackboard(积性函数+DP)

    题目链接:http://codeforces.com/contest/1097/problem/D 题目大意:给你n和k,每一次可以选取n的因子代替n,然后问你k次操作之后,每个因子的期望. 具体思路 ...

  9. Codeforces1097D. Makoto and a Blackboard(数论+dp+概率期望)

    题目链接:传送门 题目大意: 给出一个整数n写在黑板上,每次操作会将黑板上的数(初始值为n)等概率随机替换成它的因子. 问k次操作之后,留在黑板上的数的期望. 要求结果对109+7取模,若结果不是整数 ...

随机推荐

  1. C语言问答九问

    C语言问题观: 一.环境搭建问题:linux,(可以是w10下linux子系统):vim(notepad++),gcc编译器,gdb调试器,make自动编译工具,ddd分析工具和valgrind分析工 ...

  2. mxnet快速入门教程

    前段时间工作中用到了MXnet,然而MXnet的文档写的实在是.....所以在这记录点东西,方便自己,也方便大家. 一.MXnet的安装及使用 开源地址:https://github.com/dmlc ...

  3. 启动maven项目时报错Failed to start component [StandardEngine[Tomcat]]: A child container failed during start

    详细错误信息:Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run (default-cli) on ...

  4. 重读APUE(7)-link/unlink与mkdir/rmdir

    link–用于创建一个现有文件的链接:实际上是新建一个目录项,指向当前文件的i节点: unlink–用于删除一个现有文件的连接:实际上是对引用i节点的目录项进行删除,并且对链接计数-1:系统会检查文件 ...

  5. Linux设备驱动程序 之 软中断

    软中断保留给系统中对时间要求严格以及最重要的下半部使用:目前,只有两个子系统(网络和SCSI)直接使用软中断:此外,内核定时器和tasklet都是建立在软中断上的:在使用软中断之前,要先确定为什么不能 ...

  6. <JavaScript> 匿名函数和闭包的区别

    匿名函数:没有名字的函数:并没有牵扯到应用其他函数的变量问题.仅仅是没有名字. 定义方式: 1,var A = function(){ }; 2, (function (x,y){ })(2,3); ...

  7. mac下更新node版本

    node有一个专门管理node.js版本的包叫作:n: 查看当前 node版本:node -v 安装n工具包:sudo npm i -g n 安装最新版node.js:sudo n stable 安装 ...

  8. kubectl 之 patch 命令

    patch命令 kubectl patch — Update field(s) of a resource using strategic merge patch Synopsis kubectl p ...

  9. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_22-CMS前端页面查询开发-Api调用-跨域解决

    点击页面查询按钮 ,报错.跨域问题. 前端端口是11000 请求后端的服务地址端口是31001 出现跨域 开始解决跨域 把前面带端口的地址 用变量代替 只有带/api/cms开头的就转发的服务端310 ...

  10. Throughput Controller(吞吐量控制器) 感觉就像个线程控制器来的

    Percent Executions  下的 Throghput 意思是跑总线程的百分之多少. 如 10线程循环一次, Throghput 设置为80,则有8个线程会跑这个请求 Total Execu ...