Codeforces Round #548 (Div. 2) D. Steps to One(容斥定理+概率+推级数)

本文介绍了一个数学问题的解决方法:给定初始数m,通过不断等概率添加1到m范围内的数直至最大公约数变为1时,计算此过程的期望长度。文章详细解析了如何利用莫比乌斯函数进行容斥修正,最终通过编程实现解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:http://codeforces.com/contest/1139/problem/D

题目大意

给定一个流程:初始为一个数m,
每次等概率的添加一个1到m范围的数,
直到其共同的gcd为1,流程结束,计算期望长度。

题目分析

我们不妨分析这个串最后结束前,其gcd是多少,假设p是他们共同的gcd,

那么对于1到m这个整理,有多少个数是p的倍数?答案是\frac{n}{p},那么就有n-\frac{n}{p}

数不是p的倍数,那么对于下一个出现的数只要出现在不是p倍数的集合中就可以结束该串,

并且我们可以知道概率.

所以对于特定的p,我们定义f(p)表示其最后的gcd是p的串的期望长度,

但是对于所有的p其是有重复计算的,比如2和3算完了可能就把6算进去了,用莫比乌斯函数容斥下即可,最后求和计数.

注意点是答案初始值为1,然后p从2开始扫描,代码不难

答案初始值是1是因为对于m=1的情况其答案为1,我们讨论p的同时其实改变了m.(口胡....T_T)

#include<bits/stdc++.h>
using namespace std;

#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define ll long long

#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root l,r,rt
#define mst(a,b) memset((a),(b),sizeof(a))
#define pii pair<int,int>
#define fi first
#define se second
#define mk(x,y) make_pair(x,y)
const int mod=1e9+7;
const int maxn=1e5+5;
const int ub=1e6;
ll powmod(ll x,ll y){ll t; for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod; return t;}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
/*
题目大意:
给定一个流程:初始为一个数m,
每次等概率的添加一个1到m范围的数,
直到其共同的gcd为1,流程结束,计算期望长度。

题目分析:


*/
int m,prim[maxn],tot=0;
int vis[maxn],miu[maxn];
void sieve(){
    miu[1]=1;
    for(int i=2;i<=m;i++){
        if(vis[i]==0) prim[tot++]=i,miu[i]=1;
        for(int j=0;j<tot;j++){
            if(i*prim[j]>m) break;
            int tp=i*prim[j];vis[tp]=1;
            if(i%prim[j]) miu[tp]=-miu[i];
            else break;
        }
    }
}
int main(){
    cin>>m;
    sieve();
    ll ans=1;
    rep(i,2,m+1) if(miu[i]){
        ans=(ans+miu[i]*(m/i)*powmod(m-m/i,mod-2)+mod)%mod;
    }
    cout<<ans<<endl;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值