题意

题目链接

从\([1, M]\)中随机选数,问使得所有数gcd=1的期望步数

Sol

一个很显然的思路是设\(f[i]\)表示当前数为\(i\),期望的操作轮数,转移的时候直接枚举gcd

\(f[i] = 1 + \frac{ \sum_{j=1}^N f[gcd(i, j)]}{N}\)

然后移一下项就可以算出\(f[i]\)了。

发现gcd相同的有很多,可以预处理一下。

复杂度\(O(跑的过)\)

还有一种反演做法表示推不出来qwq

#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
//#define int long long
#define LL long long
#define ull unsigned long long
#define Fin(x) {freopen(#x".in","r",stdin);}
#define Fout(x) {freopen(#x".out","w",stdout);}
using namespace std;
const int MAXN = 1e6 + 10, mod = 1e9 + 7, INF = 1e9 + 10;
const double eps = 1e-9;
template <typename A, typename B> inline bool chmin(A &a, B b){if(a > b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline bool chmax(A &a, B b){if(a < b) {a = b; return 1;} return 0;}
template <typename A, typename B> inline LL add(A x, B y) {if(x + y < 0) return x + y + mod; return x + y >= mod ? x + y - mod : x + y;}
template <typename A, typename B> inline void add2(A &x, B y) {if(x + y < 0) x = x + y + mod; else x = (x + y >= mod ? x + y - mod : x + y);}
template <typename A, typename B> inline LL mul(A x, B y) {return 1ll * x * y % mod;}
template <typename A, typename B> inline void mul2(A &x, B y) {x = (1ll * x * y % mod + mod) % mod;}
template <typename A> inline void debug(A a){cout << a << '\n';}
template <typename A> inline LL sqr(A x){return 1ll * x * x;}
template <typename A, typename B> inline LL fp(A a, B p, int md = mod) {int b = 1;while(p) {if(p & 1) b = mul(b, a);a = mul(a, a); p >>= 1;}return b;}
template <typename A, typename B> inline A gcd(A x, B y) {return !y ? x : gcd(y, x % y);}
int inv(int x) {return fp(x, mod - 2);
}
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, f[MAXN], INVN;
vector<int> d[MAXN], cnt[MAXN];
void sieve() {for(int i = 1; i <= N; i++) for(int k = i; k <= N; k += i) d[k].push_back(i);for(int i = 1; i <= N; i++) {cnt[i].resize(d[i].size() + 1);for(int j = d[i].size() - 1; ~j; j--) {cnt[i][j] = N / d[i][j];for(int k = j + 1; k < d[i].size(); k++)if(!(d[i][k] % d[i][j])) cnt[i][j] -= cnt[i][k];}//for(int j = 0; j < d[i].size(); j++)//  printf("%d %d %d\n", i, d[i][j], cnt[i][j]);}}
signed main() {N = read(); INVN = inv(N);sieve();int ans = 0;for(int i = 2; i <= N; i++) {int lf = N, tmp = 0;/*for(int j = 1, t = 1; j <= N; j++) {if((t = gcd(i, j)) == i) lf--;else add2(tmp, f[t]);}*/for(int j = 0; j < d[i].size(); j++) {if(d[i][j] == i) lf -= cnt[i][j];else add2(tmp, mul(cnt[i][j], f[d[i][j]]));}f[i] = add(N, tmp); mul2(f[i], inv(lf));}for(int i = 1; i <= N; i++) add2(ans, f[i] + 1);cout << mul(ans, INVN);return 0;
}

转载于:https://www.cnblogs.com/zwfymqz/p/10578527.html

cf1139D. Steps to One(dp)相关推荐

  1. CF1139D Steps to One 题解

    一道莫反好题. 先证个式子:E(X)=∑i≥1P(X≥i)E(X)=\sum_{i\ge 1}P(X \ge i)E(X)=∑i≥1​P(X≥i),也就是最终长度为 XXX 的期望是所有最终长度小于等 ...

  2. 【期望dp 质因数分解】cf1139D. Steps to One

    有一种组合方向的考虑有没有dalao肯高抬啊? 题目大意 有一个初始为空的数组$a$,按照以下的流程进行操作: 在$1\cdots m$中等概率选出一个数$x$并添加到$a$的末尾 如果$a$中所有元 ...

  3. (每日一题)CF1139D Steps to One 2021年天梯赛 L3-3 可怜的简单题(期望,莫比乌斯反演,杜教筛)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 一周连考三门,人都没了 Weblink 2021年天梯赛 L3-3 可怜的简单题 CF1139D Pr ...

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

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

  5. leetcode 1269. 停在原地的方案数(dp)

    示例 1: 输入:steps = 3, arrLen = 2 输出:4 解释:3 步后,总共有 4 种不同的方法可以停在索引 0 处. 向右,向左,不动 不动,向右,向左 向右,不动,向左 不动,不动 ...

  6. html常用英文编码大全,HTML常用特殊字符编码对照表以及其对应英文

    Memcached基础知识 主要内容: Memcached基本的工作原理 Memcached的两阶段哈希 Memcached的数据存储方式 Memcached新建Item分配内存过程 Memcache ...

  7. 2010提高组-乌龟棋 [记忆优化搜索]

    题目: 有n个格子,你有m张牌,每张牌上面有个数字,用了这张牌你就可以走这张牌上对应的数字了,每到达一个格子,你就会获得格子上相应的分数,问你如何合理的出牌,使分数最大化. 记忆优化搜索可能会好写一点 ...

  8. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  9. 京东2019春招算法工程师笔试题-牛牛下象棋(编程题3)

    这次京东2019的春招算法工程师笔试时间是2018-04-09 19:00~21:00,其中有三道编程题目,当时就做了2个,后一个时间原因就没做,就截了一个图,今天又突然看到了,练练手吧哈. 题目要求 ...

最新文章

  1. JNI 实战全面解析
  2. python编程爱心-520用Python画一颗特别的爱心送给她
  3. Java连载2-Java特性
  4. mysql创建数据库并且指定utf-8编码
  5. 如何把winPE装到硬盘隐藏起来
  6. Linux磁盘分区与挂载
  7. CodeForces 1514A Perfectly Imperfect Array
  8. 一文看懂 | 内存交换机制
  9. 7.2图的存储结构(十字链表、邻接多重表、边集数组)
  10. 酷乐emlog下载插件
  11. fedora启动进入命令窗口_查看版本_修改hostname
  12. 图像工作回顾之六:视频质量诊断
  13. ios wkweb设置图片_ios·WKWebView\UIWebView加载HTMLString,实现图片懒加载
  14. LVGL | LVGL移植之中文文档
  15. cython(cython安装)
  16. python远程聊天_python 实现实时聊天
  17. 【VUE】【VUE-CLI】【bootstrap】【jeecgboot】干部任免表前端
  18. 苹果手机打字换行怎么换_苹果id怎么换
  19. OpenGL-图元装配
  20. mac address 的一些操作

热门文章

  1. poj3621 Sightseeing Cows --- 01分数规划
  2. Android监听应用程序安装和卸载
  3. R | 对亚马逊新总部可能位置进行可视化
  4. 机器人车间气管_汽车消声器生产中的焊接机器人应用与工艺流程
  5. 内存条结构_CPU是电脑里最难坏的硬件,为什么不敢终身质保,而内存条却可以...
  6. 微型计算机中的外存储器 现在普遍采用,2010澳门特别行政区全国计算机等级考试二级笔试试卷VB最新考试试题库(完整版)...
  7. aws主机php环境搭建,亚马逊AWS上安装Nginx(Linux,CentOS环境)
  8. 小米五android o卡吗,【图片】小米5优化教程,吃鸡卡的进来!!!_小米5吧_百度贴吧...
  9. angular Ng-Zrro树形控件 异步加载
  10. linux 获取 基地址,linux - 每个函数加载的glibc基地址不同。 - SO中文参考 - www.soinside.com...