蒟蒻数学渣呀,根本不会做。

解法是参考 https://blog.csdn.net/xs18952904/article/details/88785210 这位大佬的。

状态的设计和转移如上面博客一样:dp[i]代表当前序列的gcd为i的期望长度。

那么可以写出状态转移方程:dp[i]=(1+(x/m)∑(j|i,j≠i)dp[j]) / (1-(m/i)/m) (写得有点乱,其实和上面大佬的一样的)

这里要说一下的是 x=∑(t=1,t<=m) [ gcd(t,i)==j ]  就是怎么求1<=t<=m 中gcd(t,i)=j的t的个数。

这里考虑莫比乌斯反演:

x=∑(t=1,t<=m)[gcd(t,i)=j]

把j提出来 x=∑(t=1,t<=m/j) [gcd(t,i/j)=1]

代入莫比乌斯性质:x=∑(t=1,t<=m) ∑(d|gcd(t,i/j)) μ(d)

套路,改为枚举d : x=(m/jd)(d|(i/j)) μ(d)

这样就可以求出x了,这道题就可以解决了。

时间复杂度为O(m*log(m)*因子个数)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+;
const int MOD=1e9+;
LL m,mu[N],v[N],dp[N]; LL power(LL x,LL p) {
LL ret=;
for (;p;p>>=) {
if (p&) ret=(ret*x)%MOD;
x=(x*x)%MOD;
}
return ret;
} vector<int> fac[N];
void prework() {
for (int i=;i<=m;i++)
for (int j=;j<=m/i;j++)
fac[i*j].push_back(i);
for (int i=;i<=m;i++) mu[i]=,v[i]=;
for (int i=;i<=m;i++) {
if (v[i]) continue;
mu[i]=-;
for (int j=*i;j<=m;j+=i) {
v[j]=;
if ((j/i)%i==) mu[j]=;
else mu[j]*=-;
}
}
} LL calc(LL i,LL j) {
LL ret=;
for (int k=;k<fac[i/j].size();k++) {
int d=fac[i/j][k];
LL tmp=(mu[d]+MOD)%MOD*(m/j/d)%MOD;
ret=(ret+tmp)%MOD;
}
return ret;
} int main()
{
cin>>m;
prework();
LL ans=; dp[]=;
for (int i=;i<=m;i++) {
dp[i]=;
for (int j=;j<fac[i].size();j++) {
if (fac[i][j]==i) continue;
LL x=calc(i,fac[i][j]);
dp[i]=(dp[i]+x*dp[fac[i][j]]%MOD)%MOD;
}
dp[i]=dp[i]*power(m,MOD-)%MOD;
dp[i]=(dp[i]+)%MOD;
dp[i]=(dp[i]*m%MOD*power(m-m/i,MOD-))%MOD;
ans=(ans+dp[i]*power(m,MOD-)%MOD)%MOD;
}
cout<<ans<<endl;
return ;
}

Codeforces - 1139D - Steps to One (概率DP+莫比乌斯反演)的更多相关文章

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

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

  2. Codeforces.1139D.Steps to One(DP 莫比乌斯反演)

    题目链接 啊啊啊我在干什么啊.怎么这么颓一道题做这么久.. 又记错莫比乌斯反演式子了(╯‵□′)╯︵┻━┻ \(Description\) 给定\(n\).有一个初始为空的集合\(S\).令\(g\) ...

  3. CodeForces 24D Broken robot (概率DP)

    D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  4. CodeForces 540D--Bad Luck Island(概率DP)

    貌似竟然是我的第一道概率DP.. 手机码代码真不舒服.... /************************************************ Memory: 67248 KB Ti ...

  5. codeforces 148D Bag of mice(概率dp)

    题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完 ...

  6. Codeforces 809E - Surprise me!(虚树+莫比乌斯反演)

    Codeforces 题目传送门 & 洛谷题目传送门 1A,就 nm 爽( 首先此题一个很棘手的地方在于贡献的计算式中涉及 \(\varphi(a_ia_j)\),而这东西与 \(i,j\) ...

  7. Codeforces 1139D Steps to One dp

    Steps to One 啊, 我要死了, 这种垃圾题居然没写出来, 最后十分钟才发现错在哪. 不知道为什么我以为 对于一个数x , 除了它的因子和它的倍数都是和它互质的, 我脑子是抽了吗? 随便瞎d ...

  8. Codeforces 148D Bag of mice 概率dp(水

    题目链接:http://codeforces.com/problemset/problem/148/D 题意: 原来袋子里有w仅仅白鼠和b仅仅黑鼠 龙和王妃轮流从袋子里抓老鼠. 谁先抓到白色老师谁就赢 ...

  9. CodeForces 148D-Bag of mice(概率dp)

    题意: 袋子里有w个白球b个黑球,现在两个人轮流每次取一个球(不放回),先取到白球的获胜,当后手取走一个球时,袋子里的球会随机的漏掉一个,问先手获胜的概率. 分析: dp[i][j]表示袋子中i个白球 ...

随机推荐

  1. win10定时任务

    1.设置everything开机启动 电脑--管理

  2. 三步完成Source Insight 4.0 破解安装(转)

    转自:https://blog.csdn.net/biubiuibiu/article/details/78044232 三步完成Source Insight 4.0 破解安装   下载地址有更新,之 ...

  3. UOJ197 线性规划

    传送门 由于这道题标程GG了所以必不可能AC嘛2333 单纯形法是一个很玄学的东西qwq 就是 非标准型 -> 标准型 -> 规范型 -> 松弛型 一个玄学操作——转轴操作(priv ...

  4. python 常用技巧 — 数组 (array)

    目录: 1. 数组每一行除以这一行的总数(numpy divide row by row sum) 2. 数组每一行或者每一列求平均 (python average array columns or ...

  5. c++后台开发面试常见知识点总结(三)操作系统

    静态链接库和动态链接库的区别 一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止 Debug和Release的区别 临界区互斥量信号量事件进程互斥与同步 进程有哪几种状态,状态转换图, ...

  6. fn:indexOf()详解(jsp中JSTL标签库)

    fn:indexOf()函数返回一个字符串中指定子串的位置. 语法 fn:indexOf()函数的语法如下: ${fn:indexOf(<原始字符串>,<子字符串>)} 实例演 ...

  7. List Comprehension ()(一)

    >>> L = [1,2,3,4,5] >>> L = [x+10 for x in L] >>> L [11, 12, 13, 14, 15] ...

  8. 存储过程中的in out in out 三种类型的参数

    in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变. out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程 in out 表示高参数可以 ...

  9. Panel

    在Panel上绘图的实现 近期制作了FDS的一个建模工具,由于知识有限,做出的效果是2D的.昨天上课的时候看老师画一个长方体,突然想到,为什么不给普通的2D图形加画上几条直线,就能实现2D图形的3D视 ...

  10. Mysql忘记密码:关于ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)的问题

    命令行登录mysql时,出现ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)的提示. ...