题意

每次从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 + 莫比乌斯反演的更多相关文章

  1. Codeforces Round 548 (Div. 2)

    layout: post title: Codeforces Round 548 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  2. codeforces#1139D. Steps to One (概率dp+莫比乌斯反演)

    题目链接: http://codeforces.com/contest/1139/problem/D 题意: 在$1$到$m$中选择一个数,加入到一个初始为空的序列中,当序列的$gcd$和为$1$时, ...

  3. Codeforces Round #548 (Div. 2) C dp or 排列组合

    https://codeforces.com/contest/1139/problem/C 题意 一颗有n个点的树,需要挑选出k个点组成序列(可重复),按照序列的顺序遍历树,假如经过黑色的边,那么这个 ...

  4. Codeforces Round #131 (Div. 1) B. Numbers dp

    题目链接: http://codeforces.com/problemset/problem/213/B B. Numbers time limit per test 2 secondsmemory ...

  5. Codeforces Round #131 (Div. 2) B. Hometask dp

    题目链接: http://codeforces.com/problemset/problem/214/B Hometask time limit per test:2 secondsmemory li ...

  6. Codeforces Round #276 (Div. 1) D. Kindergarten dp

    D. Kindergarten Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/proble ...

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

  8. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

    题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...

  9. Codeforces Round #539 (Div. 2) 异或 + dp

    https://codeforces.com/contest/1113/problem/C 题意 一个n个数字的数组a[],求有多少对l,r满足\(sum[l,mid]=sum[mid+1,r]\), ...

随机推荐

  1. 【C++ const_cast强制转换】

  2. Java 枚举类 详解

    1.枚举是什么? Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象.比如一个季节类有春.夏.秋.冬四个对象:一个星期有星期一到星期日七个对象.这些明显都是固定的 ...

  3. win下Apache2.4的下载与安装

    1.到apache官网上下载apache的安装文件 http://httpd.apache.org/download.cgi   点击链接Files for Microsoft Windows,因为a ...

  4. Freemarker全部文档和具体实例

    自己查找到了一些相关的资料分享给大家,有兴趣的可以去看看! Freemarker全部文档:http://www.open-open.com/doc/list/101?o=p

  5. 【转】Javascript中使用WScript.Shell对象执行.bat文件和cmd命令

    WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...

  6. git web找不到new project解决方法

    group->选一个project->new project This is a annoying for two reasons: users might not understand ...

  7. 梦殇 chapter three

    chapter three 悲伤有N个层面.对于生命是孤独的底色,对于时间是流动的伤感,对于浪漫是起伏的变奏,对于善和怜悯是终生的慨叹…… 出去和舍友买完东西,刚回到宿舍,舍友就说,刚才有人给你打电话 ...

  8. 关于thymeleaf的if多条件判断

    <ul class="nav nav-second-level"> <li th:each="cmenu : ${menu.children}" ...

  9. UVA 11235 (RMQ) 频繁出现的数值

    题目大意是给出一个非降序排列的数组,然后n个询问,每次询问一个区间内出现次数最多的数的次数. 首先要弄清楚题目的是一个非降序的数组,那么说明相等的数都会在一起,类似于11223334569这样的,那么 ...

  10. 在iOS 8及以后使用UIAlertController 等各种弹出警告通知

    原文转自:在iOS 8中使用UIAlertController 感谢作者分享,自我学习之用 iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UI ...