Codeforces Round #548 (Div. 2) D 期望dp + 莫比乌斯反演
题意
每次从1,m中选一个数加入队列,假如队列的gcd==1停止,问队列长度的期望
题解
- 概率正着推,期望反着推
发现每加入一个数,gcd会变为原来gcd的因数
- \(dp[x]\) - > \(dp[gcd(x,i)]\)
- 但是方程却是反方向的
- 图片
代码
#include<bits/stdc++.h>
#define MOD 1000000007
#define MAXN 100005
#define ll long long
using namespace std;
ll m,inv,ans,dp[MAXN],i;
vector<int>G[MAXN];
int mu[MAXN],pr[MAXN],cnt,vi[MAXN];
ll pw(ll bs,ll x){
ll ans=1;
while(x){
if(x&1)ans=ans*bs%MOD;
bs=bs*bs%MOD;
x>>=1;
}
return ans;
}
void get_mu(){
mu[1]=1;
for(int i=2;i<MAXN;i++){
if(!vi[i]){mu[i]=-1;pr[++cnt]=i;}
for(int j=1;j<=cnt&&pr[j]*i<MAXN;j++){
vi[i*pr[j]]=1;
if(i%pr[j]==0)break;
mu[i*pr[j]]=-mu[i];
}
}
}
void sol(){
dp[1]=0;
for(int i=2;i<=m;i++){
dp[i]=m;
for(int j=0;j<G[i].size();j++){
ll cnt=0,x=G[i][j];
if(x==i)continue;
for(int k=0;k<G[i/x].size();k++){
ll tp=G[i/x][k];
cnt+=mu[tp]*(m/x/tp)%MOD;cnt%=MOD;
cnt+=MOD;
cnt%=MOD;
}
dp[i]+=dp[x]*cnt%MOD;
dp[i]%=MOD;
}
dp[i]=dp[i]*pw((m-m/i)%MOD,MOD-2)%MOD;
}
}
int main(){
get_mu();
cin>>m;
inv=pw(m,MOD-2);
for(int i=1;i<=m;i++)
for(int j=i;j<=m;j+=i)
G[j].push_back(i);
sol();
for(int i=1;i<=m;i++){
ans+=dp[i]%MOD;
ans%=MOD;
}
ans=ans*inv%MOD;
ans++;
cout<<ans%MOD;
}
Codeforces Round #548 (Div. 2) D 期望dp + 莫比乌斯反演的更多相关文章
- Codeforces Round 548 (Div. 2)
layout: post title: Codeforces Round 548 (Div. 2) author: "luowentaoaa" catalog: true tags ...
- codeforces#1139D. Steps to One (概率dp+莫比乌斯反演)
题目链接: http://codeforces.com/contest/1139/problem/D 题意: 在$1$到$m$中选择一个数,加入到一个初始为空的序列中,当序列的$gcd$和为$1$时, ...
- Codeforces Round #548 (Div. 2) C dp or 排列组合
https://codeforces.com/contest/1139/problem/C 题意 一颗有n个点的树,需要挑选出k个点组成序列(可重复),按照序列的顺序遍历树,假如经过黑色的边,那么这个 ...
- Codeforces Round #131 (Div. 1) B. Numbers dp
题目链接: http://codeforces.com/problemset/problem/213/B B. Numbers time limit per test 2 secondsmemory ...
- Codeforces Round #131 (Div. 2) B. Hometask dp
题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...
- Codeforces Round #276 (Div. 1) D. Kindergarten dp
D. Kindergarten Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/proble ...
- Codeforces Round #260 (Div. 1) A - Boredom DP
A. Boredom Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/problem/A ...
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...
- Codeforces Round #539 (Div. 2) 异或 + dp
https://codeforces.com/contest/1113/problem/C 题意 一个n个数字的数组a[],求有多少对l,r满足\(sum[l,mid]=sum[mid+1,r]\), ...
随机推荐
- Codeforces Beta Round #52 (Div. 2)
Codeforces Beta Round #52 (Div. 2) http://codeforces.com/contest/56 A #include<bits/stdc++.h> ...
- vue 打包
1.assetsPublicPath路径改为‘./’(两处) 2.cmd运行 cnpm run build 3.生成的dist文件即可本地访问
- 问题1:设置了text-overflow : ellipsis未起作用
<style type="text/css"> * { padding: 0; } .div01 , .div02 { margin-top: 10px; border ...
- 浅析java修饰符之public default protected private static final abstract
浅析java修饰符之public default protected private static final abstract 一 修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 ...
- 分布式大数据多维数据分析(olap)引擎kylin[转]
Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay 开发并贡献至开源社区.它能在亚秒内查询巨大的Hiv ...
- 27-java String 之间比较的幺蛾子
仔细看啊, 他有双引号啊!!!!
- 通过docker-compose构建ghost博客(二)
上一篇通过yml文件构建 ghost博客,这次通过构建nginx服务,并添加反向代理来运行搭建的ghost博客. 目录结构 ghost.conf 就是 定义的nginx 加载的配置文件 server ...
- 我的第一个WCF程序
写WCF,VS需要一管理员身份呢启动,否则服务无法访问. model层 using System; using System.Runtime.Serialization; namespace MyMo ...
- LIS LCS 最长上升子序列 最长公共子序列 ...
最长上升子序列,问题定义:http://blog.csdn.net/chenwenshi/article/details/6027086 代码: public static void getData( ...
- Struts框架的数据封装二之模型驱动方式
Struts2中提供了两类数据封装的方式? * 第二种方式:模型驱动 > 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别! & ...