CF1097D Makoto and a Blackboard
题目地址:CF1097D Makoto and a Blackboard
首先考虑 \(n=p^c\) ( \(p\) 为质数)的情况,显然DP:
令 \(f_{i,j}\) 为第 \(i\) 次替换后出现 \(p^j\) 的概率
边界:
\[f_{0,c}=1\]
状态转移方程:
\[f_{i,j}=\sum_{t=j}^{c} \frac{f_{i-1,t}}{t+1}\]
目标:
\[\sum_{j=0}^{c}\ f_{k,j}\ p^j\]
考虑一般情况,将 \(n\) 分解质因数:
\[n=\prod_{i=1}^{m} {p_i}^{c_i}\]
按照上述方法DP每个 \({p_i}^{c_i}\)
由于期望是积性函数,直接将所有答案乘起来即可 (我就是卡在这一步上,难受QWQ)
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int K = 10006, C = 56, P = 1000000007;
ll n, f[K][C], inv[C];
int k;
vector<pair<ll, int> > d;
void divide(ll n) {
for (ll i = 2; i <= sqrt(n); i++)
if (n % i == 0) {
int c = 0;
while (n % i == 0) {
n /= i;
++c;
}
d.push_back(make_pair(i, c));
}
if (n > 1ll) d.push_back(make_pair(n, 1));
}
ll work(ll p, int c) {
for (int i = 0; i <= k; i++)
for (int j = 0; j <= c; j++)
f[i][j] = 0;
f[0][c] = 1;
for (int i = 1; i <= k; i++)
for (int j = c; j >= 0; j--)
for (int t = j; t <= c; t++)
f[i][j] = (f[i][j] + f[i-1][t] * inv[t+1] % P) % P;
ll ans = 0, now = 1;
for (int j = 0; j <= c; j++) {
ans = (ans + f[k][j] * now % P) % P;
now = now * p % P;
}
return ans;
}
int main() {
inv[1] = 1;
for (int i = 2; i < C; i++)
inv[i] = -(P / i) * inv[P%i] % P;
cin >> n >> k;
divide(n);
ll ans = 1;
for (unsigned int i = 0; i < d.size(); i++)
ans = ans * work(d[i].first, d[i].second) % P;
cout << (ans + P) % P << endl;
return 0;
}
CF1097D Makoto and a Blackboard的更多相关文章
- CF1097D Makoto and a Blackboard 积性函数、概率期望、DP
传送门 比赛秒写完ABC结果不会D--最后C还fst了qwq 首先可以想到一个约数个数\(^2\)乘上\(K\)的暴力DP,但是显然会被卡 在\(10^{15}\)范围内因数最多的数是\(978217 ...
- cf1097D. Makoto and a Blackboard(期望dp)
题意 题目链接 Sol 首先考虑当\(n = p^x\),其中\(p\)是质数,显然它的因子只有\(1, p, p^2, \dots p^x\)(最多logn个) 那么可以直接dp, 设\(f[i][ ...
- CF1097D Makoto and a Blackboard(期望)
link 题目大意:给您一个数 n, 每次从n的所有约数(包含1.n)中等概率选出一个约数替换n,重复操作k次,求最后结果期望值%1e9+7. 题解:考虑暴力,我们设f(n,k)代表答案,则有f(n, ...
- CF1097D Makoto and a Blackboard(期望)
[Luogu-CF1097D] 给定 \(n,k\)一共会进行 \(k\) 次操作 , 每次操作会把 \(n\) 等概率的变成 \(n\) 的某个约数 求操作 \(k\) 次后 \(n\) 的期望是多 ...
- CF1097D Makoto and a Blackboard 质因数分解 DP
Hello 2019 D 题意: 给定一个n,每次随机把n换成它的因数,问经过k次操作,最终的结果的期望. 思路: 一个数可以表示为质数的幂次的积.所以对于这个数,我们可以分别讨论他的质因子的情况. ...
- D Makoto and a Blackboard
Makoto and a Blackboard time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 【DP】【CF1097D】 Makoto and a Blackboard
更好的阅读体验 Description 给定一个数 \(n\),对它进行 \(k\) 次操作,每次将当前的数改为自己的因数,包括 \(1\) 和自己.写出变成所有因数的概率是相等的.求 \(k\) 次 ...
- CF1097D 【Makoto and a Blackboard】
我们考虑对于一个\(N\),他如果变成了他的约数\(x\),那又会变成一个子问题 我们定义\(F(n, k)\)为n操作k次的期望个数 那么我们有\(F(n, k) =\sum_{x|n} F(x, ...
- 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 ...
随机推荐
- qml Loader异步导致ComBoBox数据乱序
qml Loader异步导致ComBoBox数据乱序 当使用Loader动态加载qml文件时, 如果将Loader设置为异步,那么动态加载的组件内的ComBoBox数据将呈现乱序状态, 代码请见下文 ...
- Hortonworks官网文档怎么找?
Hortonworks官网文档怎么找? 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 俗话说,授人予鱼不如授人予渔,网上部署HDP的部署方式的博客有很多,看得你是眼花缭乱的.其实万 ...
- php5.4使用dblib扩展,连接sqlserver中文乱码问题
在使用php链接sqlserver的时候,查询出来的数据,编码不稳定,一会utf8,一会出现问号.很纠结.下面的方法,可以解决此种问题.前提是dblib扩展. 如果查到的结果是乱码,更改/usr/lo ...
- 面向对象【day08】:异常处理-断言(七)
本节内容 1.概述 2.知识点回顾 3.断言 一.概述 python中断言,这个我是第一次听说到的,断言有什么用呢?断言就是做一些程序的检查工作,就是在执行之前需要做的一些检查,比如类似于安检一样,合 ...
- .net多站点通过StateServer实现session共享
先在所有要共享站点web.config的<system.web>结点下加 <!--session的mode=StateServer--><sessionState coo ...
- Android RelativeLayout属性含义
a).第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android ...
- iOS快捷代码块
//数据请求 /**<#封装数据请求(只适用本人)#>*/ NSString * requestUrl = [NSString stringWithFormat:@"%@%@&q ...
- luogu 2569 股票交易 单调队列dp
注意转移方程 分1.凭空买 2.不买不卖 3.在原来基础上买 4.在原来基础上卖 四种情况 head=1,tail=0;再判断一下head<=tail也可以 #include<bits/s ...
- STLINK V2安装使用详解
1. 解压st-link_v2_usb driver.zip文件. 2. 运行解压后的st-link_v2_usbdriver.exe文件,安装STLINK V2驱动程序.安装路 ...
- 关于Java 实现抽象类的抽象方法的特性的利用---面向切面
今天看工作看代码突然有了以下设想: /** * Created by zq on 2017/5/25. * 抽象类 */ public abstract class AbstractC { publi ...