Hello 2019 D

题意:

  给定一个n,每次随机把n换成它的因数,问经过k次操作,最终的结果的期望。

思路:

  一个数可以表示为质数的幂次的积。所以对于这个数,我们可以分别讨论他的质因子的情况。

  假设质因子x的指数是j,那么这个质因子下一步可以变到的情况就有(j+1)种可能,利用概率DP算出k步操作后每个x的不同幂次的概率,然后求出期望。

  把每个质因子的情况算出来的期望乘起来即可。

  

#include <algorithm>
#include <iterator>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <list>
#include <map>
#include <set>
#include <cassert> using namespace std;
#define lson (l , mid , rt << 1)
#define rson (mid + 1 , r , rt << 1 | 1)
#define debug(x) cerr << #x << " = " << x << "\n";
#define pb push_back
#define pq priority_queue typedef long long ll;
typedef unsigned long long ull;
//typedef __int128 bll;
typedef pair<ll ,ll > pll;
typedef pair<int ,int > pii;
typedef pair<int,pii> p3; //priority_queue<int> q;//这是一个大根堆q
//priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
#define fi first
#define se second
//#define endl '\n' #define OKC ios::sync_with_stdio(false);cin.tie(0)
#define FT(A,B,C) for(int A=B;A <= C;++A) //用来压行
#define REP(i , j , k) for(int i = j ; i < k ; ++i)
#define max3(a,b,c) max(max(a,b), c);
#define min3(a,b,c) min(min(a,b), c);
//priority_queue<int ,vector<int>, greater<int> >que; const ll mos = 0x7FFFFFFF; //
const ll nmos = 0x80000000; //-2147483648
const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f; //
const int mod = 1e9+;
const double esp = 1e-;
const double PI=acos(-1.0);
const double PHI=0.61803399; //黄金分割点
const double tPHI=0.38196601; template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
}
/*-----------------------showtime----------------------*/
const int maxn = 1e4+;
ll dp[maxn][],inv[];
ll n; int k; ll cal(ll a,int n){
memset(dp, , sizeof(dp));
dp[][n] = ; for(int i=; i<k; i++){
for(int j=; j<=n; j++){
for(int t=; t<=j; t++){
dp[i+][t] =(dp[i+][t] + dp[i][j] * inv[j+]%mod)%mod;
}
}
} ll d = ,sum = ;
for(int i=; i<=n; i++){
sum = (sum + d * dp[k][i])%mod;
d = d * a % mod;
} return sum;
} int main(){
cin>>n>>k;
ll ans = ;
inv[] = ;
for(int i=; i<=; i++){
inv[i] = (mod - mod/i)*inv[mod%i]%mod;
} for(ll i=; i*i<=n; i++){
if(n%i==){
int cnt = ;
while(n%i==) n/=i,cnt++;
ans = ans * cal(i, cnt)%mod;
}
}
if(n>) ans = ans * cal(n, )%mod;
cout<<ans<<endl;
return ;
}

最新文章

  1. C# 可视化读取文件、文件夹
  2. jdk环境变量配置
  3. Appium移动自动化测试之获取appPackage和appActivity
  4. (二)cordova+framework7入门——笑笑APP
  5. error C2783: 无法为“T”推导 模板 参数
  6. [Node.js] Node.js Buffers
  7. gulp配置browserify多入口
  8. OC中没有实现NSCopying技术时的深复制技术
  9. html标签全称和功能介绍
  10. 201521123022 《Java程序设计》 第二周学习总结
  11. echarts纵坐标使用科学计数法表示
  12. [PHP] 数据结构-输出链表倒数第k个结点PHP实现
  13. nginx location 匹配的规则
  14. docker-compose.yml样例(mysql主从+mycat读写分离)
  15. 7. python 字符串格式化方法(2)
  16. OTL翻译(7) -- otl_exception类
  17. 一次完整的http请求全程
  18. oracle 数据导入和导出(原创)
  19. 在eclipse下使用maven的配置
  20. 高级软件测试技术(测试管理工具实践day3)

热门文章

  1. ESP-8266 RTOS 环境搭建
  2. 基于ReentrantLock的非公平锁理解AQS
  3. druid0.15.0安装方式
  4. hdoj 4762 Cut the Cake
  5. Git 学习笔记之(一) 使用 git gui 从github上下载代码
  6. Git应用之eclipse解决冲突代码
  7. maysql的自增字段
  8. Docker 架构原理及简单使用
  9. 用vue2.0+vuex+vue-router+element-ui+mockjs实现后台管理系统的实践探索
  10. Sentry错误日志监控你会用了吗?