题目

传送门

分析

考虑\(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+分解质因数)的更多相关文章

  1. 【BZOJ4197】[Noi2015]寿司晚宴 状压DP+分解质因数

    [BZOJ4197][Noi2015]寿司晚宴 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴 ...

  2. Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论

    题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...

  3. 【bzoj4197】[Noi2015]寿司晚宴 分解质因数+状态压缩dp

    题目描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 ...

  4. [CodeForces - 1225D]Power Products 【数论】 【分解质因数】

    [CodeForces - 1225D]Power Products [数论] [分解质因数] 标签:题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory ...

  5. [Codeforces 1246B] Power Products (STL+分解质因数)

    [Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i ...

  6. 【分解质因数】【树状数组】【快速幂】codeforces 2014 ACM-ICPC Vietnam National Second Round E. ACM

    乘除都在150以内,分解质因数后发现只有35个,建立35个树状数组/线段树,做区间加.区间查询,最后快速幂起来. #include<cstdio> #include<cstring& ...

  7. 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)$ ...

  8. java分解质因数

      package test; import java.util.Scanner; public class Test19 { /** * 分析:对n进行分解质因数,应先找到一个最小的质数k * 最小 ...

  9. 程序设计入门——C语言 第6周编程练习 1 分解质因数(5分)

    1 分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. ...

随机推荐

  1. css文档之盒模型阅读笔记

    前段时间抽空仔细阅读了w3c的css文档关于盒模型方面的一些基础知识.边读边记录了一些要点,在此做些整理,与大家分享,如有理解有误之处,请不吝指教. 1.综述 文档中的每个元素被描绘为矩形盒子.渲染引 ...

  2. service mesh学习规划

    istio go语言 谷歌开发 现有产品功能(每个功能具体支持哪些方式,优缺点) 服务注册发现 流量劫持 路由 负载均衡 熔断降级 流量控制(限流.流量分配) 重试机制 日志管理 支持的协议 监控(健 ...

  3. device eth0/1 does not seem to be present, delaying initialization

    vmlite虚拟机启动出错,就把这个虚拟机删除掉重新建立,系统虚拟硬盘使用之前的,启动系统后不能上网,通过ifconfig查看网卡没启动,遂启动网卡服务,但是出错,就是:device eth0 doe ...

  4. tf.reshape

    tf.reshape(tensor, shape, name=None) 其中,tensor是向量,或者说矩阵 shape是转换后的向量,或者转换后的矩阵形状 [2,1]转换成二行一列 [2,-1]转 ...

  5. C# List<object> 按特定字段排序

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  6. Mysql查询结果导出Excel表

    Mysql查询结果导出Excel表: 一句转换方式:$ mysql -uops -p'GCNgH000KP' dtbs -e 'select * from t_proxy__record;' --de ...

  7. docker安装es

    下载镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.1 创建容器并映射docker run -e ES_JAVA_OP ...

  8. Codeforces Round #595 (Div. 3) 题解

    前言 大家都在洛谷上去找原题吧,洛谷还是不错的qwq A 因为没有重复的数,我们只要将数据排序,比较两两之间有没有\(a_j - a_i == 1 (j > i)\) 的,有则输出 \(2\) ...

  9. Task2.设立计算图并自动计算

    1.numpy和pytorch实现梯度下降法 import numpy as np # N is batch size; N, D_in, H, D_out = 64, 1000, 100, 10 # ...

  10. LeetCode--052--N皇后II(java)

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案的数量. 示例: 输入 ...