[Luogu-CF1097D]

给定 \(n,k\)一共会进行 \(k\) 次操作 , 每次操作会把 \(n\) 等概率的变成 \(n\) 的某个约数

求操作 \(k\) 次后 \(n\) 的期望是多少

题解

\(f[i][j]\) 表示以某质数的 \(i\) 次方经过 \(j\) 次操作后的结果

发现答案是积性的 , 质因数分解后转移

\(f[n][k]∗f[m][k]=f[nm][k] (gcd(n,m)=1)\)

对于\(f[i][j]\)的转移 :

\(f[i][j]=\frac{1}{i+1}\sum_{k=0}^{i}f[k][j-1]\)

大胆猜测积性的性质 , 转化为质因数分解后求解

其实肯定要写出最基础的暴力才能发现一些性质 , 所以不管是什么题都要先把暴力打了再说 ; 积性函数这种猜想还是要打表证明一下

记忆化是一个神奇的东西

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#define inf 0x3f3f3f3f
#define int long long
#define p 1000000007
using namespace std; int dp[62][10002]; inline int power(int a,int t);
int inv(int n);
int solve(int a,int i,int j); signed main(){
int n,k,t,ans = 1;
scanf("%lld%lld",&n,&k);
for(int i=2;i*i<=n;++i){
if(n%i!=0) continue; //不是因数,跳过
t = 0;
while(n%i==0){
++t;
n /= i; //找到质因数,算幂次
}
memset(dp,0,sizeof(dp));
ans = (ans*solve(i,t,k))%p;
}
memset(dp,0,sizeof(dp));
if(n>1) ans = (ans*solve(n,1,k))%p; //最后可能剩下n>1,需要多算一遍
printf("%lld",ans);
return 0;
} inline int power(int a,int t){
int res = 1;
while(t){
if(t&1) res = res*a%p;
a = a*a%p;
t >>= 1;
}
return res;
} int inv(int n){
return power(n,1000000005);
} int solve(int a,int i,int j){
if(i==0){
dp[i][j] = 1; //p^0为1,经过多少次操作还是1
return 1;
}
if(j==0){
//0次操作的情况,即为原数
if(dp[i][j]==0) dp[i][j]=power(a,i);
return dp[i][j];
}
int ans = 0;
for(int k=0;k<=i;++k){
//套用上面的式子
if(dp[k][j-1]==0) dp[k][j-1] = solve(a,k,j-1);
ans = (ans+dp[k][j-1])%p;
}
return ans*inv(i+1)%p;
}

CF1097D Makoto and a Blackboard(期望)的更多相关文章

  1. cf1097D. Makoto and a Blackboard(期望dp)

    题意 题目链接 Sol 首先考虑当\(n = p^x\),其中\(p\)是质数,显然它的因子只有\(1, p, p^2, \dots p^x\)(最多logn个) 那么可以直接dp, 设\(f[i][ ...

  2. CF1097D Makoto and a Blackboard(期望)

    link 题目大意:给您一个数 n, 每次从n的所有约数(包含1.n)中等概率选出一个约数替换n,重复操作k次,求最后结果期望值%1e9+7. 题解:考虑暴力,我们设f(n,k)代表答案,则有f(n, ...

  3. CF1097D Makoto and a Blackboard

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

  4. CF1097D Makoto and a Blackboard 积性函数、概率期望、DP

    传送门 比赛秒写完ABC结果不会D--最后C还fst了qwq 首先可以想到一个约数个数\(^2\)乘上\(K\)的暴力DP,但是显然会被卡 在\(10^{15}\)范围内因数最多的数是\(978217 ...

  5. CF1097D Makoto and a Blackboard 质因数分解 DP

    Hello 2019 D 题意: 给定一个n,每次随机把n换成它的因数,问经过k次操作,最终的结果的期望. 思路: 一个数可以表示为质数的幂次的积.所以对于这个数,我们可以分别讨论他的质因子的情况. ...

  6. D Makoto and a Blackboard

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

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

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

  8. 【DP】【CF1097D】 Makoto and a Blackboard

    更好的阅读体验 Description 给定一个数 \(n\),对它进行 \(k\) 次操作,每次将当前的数改为自己的因数,包括 \(1\) 和自己.写出变成所有因数的概率是相等的.求 \(k\) 次 ...

  9. codeforces1097D Makoto and a Blackboard 数学+期望dp

    题目传送门 题目大意: 给出一个n和k,每次操作可以把n等概率的变成自己的某一个因数,(6可以变成1,2,3,6,并且概率相等),问经过k次操作后,期望是多少? 思路:数学和期望dp  好题好题!! ...

随机推荐

  1. HBase批量插入的简单代码

    由于项目需要从HBase里读取数据,进行MapReduce之后输出到HDFS中. 为了测试方便,我这里写了一个批量插入HBase数据的测试代码.采用的Maven工程. 打算,今后的所有用到的小测试例子 ...

  2. TF Boys (TensorFlow Boys ) 养成记(四):TensorFlow 简易 CIFAR10 分类网络

    前面基本上把 TensorFlow 的在图像处理上的基础知识介绍完了,下面我们就用 TensorFlow 来搭建一个分类 cifar10 的神经网络. 首先准备数据: cifar10 的数据集共有 6 ...

  3. Python with yield语句

    1.with 语句 语法: with expression as variable 需要引入一个上下文管理协议,实现的方法是为一个类定义 __enter__() 和 __exit__() 方法, 在执 ...

  4. maven 引用本地jar

    1.添加lib文件夹在src文件夹中.2.拷贝所需要的test.jar包到lib文件夹.3.在pom文件加入如下依赖 <!--添加本地私有包--><dependency> &l ...

  5. REDIS与MEMCACHED的区别(转)

    出处:http://www.blogjava.net/paulwong/archive/2013/09/06/403746.html 如果简单地比较Redis与Memcached的区别,大多数都会得到 ...

  6. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(12):XML配置自动扫描包,自动加载*.properties文件

    一.XML和注解组合使用 前几篇的测试案例都是在Java类中配置,现在换一种使用方式,在XML中配置,使Spring IoC容器在启动之后自动去扫描配置的包路径,扫描加载指定路径下的propertie ...

  7. OpenNI depth深度数据的数据格式

    图像如何打开 如何查看它的数据格式并一个个读取 试一下ENVI等 可见,灰度图的Data只有一个值[0],而彩色图的Data却有三个值[142,119,113]. 这是用ENVI的Cursor Val ...

  8. Appium命令行工作模式

    前面如何快速搭建基于python+appium的自动化测试环境介绍过安装Appium-desktop的客户端版本,然后每次需要运行脚本的时候都要先去找到Appium应用并双击打开,再点击Start S ...

  9. Python 数据分析—第八章 画图

    一.matplotlib的用法 折线图+一些常用的设置 #显示中文 import matplotlib as mpl mpl.rcParams['font.sans-serif'] = [u'SimH ...

  10. linux 文件系统基本结构

    1.Linux文件系统为一个倒转的单根树状结构 2.文件系统的根为"/" 3.文件系统严格区分大小写 4.路径使用"/",与Windows使用"\&q ...