Codeforces 1097D (DP+分解质因数)
题目
分析
考虑\(n=p^q\)且p为质数的情况
设dp[i][j]表示经过i次变化后数为\(p^j\)的概率
则初始值dp[0][q]=1
状态转移方程为\(dp[i][j]=\sum{}\frac{1}{u+1}dp[i-1][u],u\in[j,q]\)
最终的期望值\(E(p^q)=\sum dp[k][j] ·p^j ,j \in [0,q]\)
那么如果n不是某个质数的q次方呢
把n分解质因数,\(n={p_1}^{q_1}{p_2}^{q_2} \dots {p_n}^{q_n}\)
对于每一个\({p_i}^{q_i}\),求出期望再相乘即可
注意逆元最好要预处理,否则常数略大,总时间复杂度\(O(\sqrt n+k \log n)\)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 205
#define maxk 10005
#define mod 1000000007
using namespace std;
inline long long fast_pow(long long x,long long k){
	long long ans=1;
	while(k){
		if(k&1) ans=ans*x%mod;
		x=x*x%mod;
		k>>=1;
	}
	return ans;
}
inline long long inverse(long long x){
	return fast_pow(x,mod-2);
}
long long n,k;
int cnt=0;
long long p[maxn];
int a[maxn];
void div(long long x){
	long long i=2;
	while(i*i<=x){
		if(x%i){
			i++;
		}else{
			p[++cnt]=i;
			while(x%i==0){
				a[cnt]++;
				x/=i;
			}
		}
	}
	if(x!=1){
		p[++cnt]=x;
		a[cnt]=1;
	}
}
long long inv[maxn];
long long dp[maxn];
long long dp_solve(long long p,int q){
	memset(dp,0,sizeof(dp));
	dp[q]=1;
	for(int i=1;i<=k;i++){
		for(int j=0;j<=q;j++){
			long long tmp=0;
			for(int u=j;u<=q;u++){
				tmp=(tmp+dp[u]*inv[u+1]%mod)%mod;
			}
			dp[j]=tmp;
		}
	}
	long long ans=0;
	for(int i=0;i<=q;i++){
		ans+=fast_pow(p,i)*dp[i]%mod;
		ans%=mod;
	}
	return ans;
}
int main(){
	scanf("%I64d %d",&n,&k);
	div(n);
	long long ans=1;
	for(int i=0;i<=100;i++){
		inv[i]=inverse(i);
	}
	for(int i=1;i<=cnt;i++){
		ans*=dp_solve(p[i],a[i]);
		ans%=mod;
	}
	printf("%I64d\n",ans%mod);
}
Codeforces 1097D (DP+分解质因数)的更多相关文章
- 【BZOJ4197】[Noi2015]寿司晚宴 状压DP+分解质因数
		[BZOJ4197][Noi2015]寿司晚宴 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴 ... 
- Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论
		题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ... 
- 【bzoj4197】[Noi2015]寿司晚宴  分解质因数+状态压缩dp
		题目描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 ... 
- [CodeForces - 1225D]Power Products 【数论】 【分解质因数】
		[CodeForces - 1225D]Power Products [数论] [分解质因数] 标签:题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory ... 
- [Codeforces 1246B] Power Products (STL+分解质因数)
		[Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i ... 
- 【分解质因数】【树状数组】【快速幂】codeforces 2014 ACM-ICPC Vietnam National Second Round E. ACM
		乘除都在150以内,分解质因数后发现只有35个,建立35个树状数组/线段树,做区间加.区间查询,最后快速幂起来. #include<cstdio> #include<cstring& ... 
- Gym 101981J - Prime Game - [数学题][线性筛+分解质因数][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem J]
		题目链接:http://codeforces.com/gym/101981/attachments 题意: 令 $mul(l,r) = \prod_{i=l}^{r}a_i$,且 $fac(l,r)$ ... 
- java分解质因数
		package test; import java.util.Scanner; public class Test19 { /** * 分析:对n进行分解质因数,应先找到一个最小的质数k * 最小 ... 
- 程序设计入门——C语言 第6周编程练习 1  分解质因数(5分)
		1 分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. ... 
随机推荐
- ORA-00911: invalid character 错误解决
			多数情况如下: 控制面板--系统和安全---系统--高级系统设置--高级--环境变量--系统变量中 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK ... 
- ReentrantLock等待通知机制Condition介绍
			Object类中的wait(),notify()和notifyAll()可以实现线程的等待通知模型,同样在ReentrantLock中可以借助Condition来完成这种机制.本篇就简要介绍Condi ... 
- linux系统安装telnet服务
			linux安装telnet 安装前准备工作 1.安装telnet服务需要三个软件包:telnet.telnet-server和xinetd包. telnet,telnet-sever,xinetd软件 ... 
- 狼人杀校园升级版:学霸大战学渣 Who is the king of examination!
			之前在微博上看到一个很老的段子 写道 天黑请闭眼.学霸请睁眼,学霸请答题,好的学霸请闭眼:学渣请睁眼,学渣请坐弊,好的学渣请闭眼:监考老师请睁眼,监考老师请确定坐弊考生,监考老师请统一意见,好的监考老 ... 
- Mongodb副本集实现及读写分离
			前言 地址:https://blog.csdn.net/majinggogogo/article/details/51586409 作者介绍了,mongodb副本集的读写原理,原理是通过代码层来实现. ... 
- pycharm中能运行,但是往往py都要放到服务器上去跑,问题来了
			py文件在linux上运行,导包错误: 在py文件中添加项目的根目录: import sys sys.path.append('项目路径') sys.path.append(os.path.dirna ... 
- B/S大文件上传解决方案
			第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname = ... 
- 特权第一讲--Lesson 1 课程概述与如何学好FPGA
			FPGA的学习没有什么捷径,需要学习者多花时间和精力 . 1.设计输入 2.如何--对综合布局布线结果进行优化 3.如何--更有效地进行验证 4.如何--达到时序收敛 学习者需要用心去学习.去分析.去 ... 
- 【HDOJ6628】permutation 1(dfs)
			题意:求1到n的排列中使得其差分序列的字典序为第k大的原排列 n<=20,k<=1e4 思路:爆搜差分序列,dfs时候用上界和下界剪枝 #include<bits/stdc++.h& ... 
- mui初级入门教程(一)— 小白入手mui的学习路线
			文章来源:小青年原创发布时间:2016-05-15关键词:mui,html5+转载需标注本文原始地址:http://zhaomenghuan.github.io/#!/blog/20160515 写在 ... 
