首页 > 其他分享 >Steps to One

Steps to One

时间:2024-10-16 15:32:30浏览次数:7  
标签:lfloor right frac sum rfloor Steps left

Steps to One

\(CF\) 星不知道多少,开口放不知道 \(T\) 几。

简化题意

给一个数列,每次随机选一个 \(1\) 到 \(m\) 之间的数加在数列末尾,数列中所有数的 \(\gcd = 1\) 时停止,求期望长度。

\(m \le 10 ^ 5\)

题解

久违的推式子题,简单式子(虽然我推了一上午)。

先来个 \(DP\)。

设 \(dp_i\) 表示 \(\gcd = i\) 时变到 \(\gcd = 1\) 需要的期望步数。

显然:

\[dp_i = \frac{\sum^{m}_{j = 1}dp_{\gcd(i , j)}}{m} + 1 \]

行吧看来需要整的就是上边那一坨和式。
方便点设 \(f(i) = dp_i\)

\[\begin{aligned} & \ \ \ \ \ \sum^{m}_{j = 1}f(\gcd(i , j)) \\ &= \sum_{k = 1}^{i} \sum_{j = 1}^{m} \left[\gcd(i , j) =\!= k\right]f(k) \\ &= \sum_{k | n}f(k)\sum_{j = 1}^{\left \lfloor \frac{m}{k} \right \rfloor}\left[\gcd(\frac{n}{k} , j) =\!= 1\right] \\ &= \sum_{k | n}f(k)\sum_{j = 1}^{\left \lfloor \frac{m}{k} \right \rfloor}\sum_{d | \frac{n}{k},d | j}\mu(d) \end{aligned}\]

这里停一下,有些长得帅的小伙伴不会推了(其实是我不会推了卡了我十几分钟qwq),我们发现从 \(j\) 开始的和式再化有些困难。

那我们这样:

首先不考虑 \(d | \frac{n}{k}\) ,显然原式(后面那一坨)为:

\[\sum_{d = 1}^{\left \lfloor \frac{m}{k} \right \rfloor}\left \lfloor \frac{m}{kd} \right \rfloor \mu(d) \]

我们考虑把 \(d | \frac{n}{k}\) 限制条件加进去。

那我们发现一个显然的大小关系就是 \(\left \lfloor \frac{m}{k} \right \rfloor \ge \frac{n}{k}\)。

那这个 \(d\) 显然肯定都小于 \(\frac{n}{k}\)。

那我们只要被 \(\frac{n}{k}\) 整除的 \(d\) 就行了。

接着推:

\[\begin{aligned} &= \sum_{k | n}f(k)\sum_{d | \frac{n}{k}} \left \lfloor \frac{m}{kd} \right \rfloor \mu(d) \\ \end{aligned}\]

然后小套路,设 \(x = kd\)

\[\begin{aligned} &= \sum_{k | n} f(k)\sum_{x | n} \left \lfloor \frac{m}{x} \right \rfloor \mu(\frac{x}{k}) \\ &= \sum_{x | n} \left \lfloor \frac{m}{x} \right \rfloor \sum_{k | x} f(k) \mu(\frac{x}{k}) \end{aligned}\]

然后我们就发现后面这一坨是一个狄利克雷卷积。

设 \(g = f * \mu\)。

对于 \(1 \dots m\) 枚举每个数的约数是 \(n \ln n\) 的。

所以直接暴力统计即可。

\[\therefore f(i) = \frac{\sum\limits_{x | n} \left \lfloor \frac{m}{x} \right \rfloor g(x)}{m} + 1 \]

他上面好像统计了 \(\left \lfloor \frac{m}{i} \right \rfloor f(i)\) 欸。不是这个我显然要把他放到左边去吧。我能计算出来的上面式子包含不出这个东西。

设 \(\sum\limits_{x | n} \left \lfloor \frac{m}{x} \right \rfloor g(x)(x \not= i) = ans\)

则:

\[f(i) - \frac{\left \lfloor \frac{m}{i} \right \rfloor}{m}f(i) = \frac{ans}{m} + 1 \]

现在好像真做完了。

Code

#include <bits/stdc++.h>
typedef long long ll ; 
using namespace std ; 
const int N = 1e5 + 100 ; 
const int mod = 1e9 + 7 ; 

int prime[N] , tot , m ; 
bool used[N] ; 
ll f[N] , Mobius[N] , Convol[N] ; 
ll nueyong[N << 1] ; 
vector <int> factor[N] ; 

void Linear_Mobius() {
	Mobius[1] = 1 ; nueyong[1] = 1 ; 

	for (int i = 2 ; i < N ; ++ i) {
		if (!used[i]) {
			prime[++ tot] = i , Mobius[i] = -1 ; 
		}

		for (int j = 1 ; j <= tot && prime[j] * i < N ; ++ j) {
			used[i * prime[j]] = 1 ; 

			if (i % prime[j] == 0) {
				Mobius[i * prime[j]] = 0 ; 
				break ; 
			}

			Mobius[i * prime[j]] = - Mobius[i] ; 
		}
	}

	for (int i = 2 ; i < (N << 1) ; ++ i) {
		nueyong[i] = 1ll * (mod / i) * (mod - nueyong[mod % i]) % mod ; 
	}
}

signed main() {
	ios::sync_with_stdio(0) , cin.tie(0) , cout.tie(0) ; 
	cin >> m ; Linear_Mobius() ; 
	
	for (int i = 1 ; i <= m ; ++ i) {
		for (int j = 1 ; i * j <= m ; ++ j) {
			factor[i * j].push_back(i) ; 
		}
	}

	ll ans = 0 , Answer = 0 ; 

	for (int i = 2 ; i <= m ; ++ i) {
		ans = 0 ; 
		for (auto j : factor[i]) (ans += (m / j) * Convol[j]) %= mod ; 
		f[i] = ((ans + m) * nueyong[m - (m / i)]) % mod ; 
		for (int k = i ; k <= m ; k += i) Convol[k] = (Convol[k] + Mobius[k / i] * f[i] + mod) % mod ; 
		(Answer += f[i]) %= mod ; 
	}

	Answer = ((Answer * nueyong[m]) + 1) % mod ; 
	cout << Answer ; 
}

结尾撒花!

标签:lfloor,right,frac,sum,rfloor,Steps,left
From: https://www.cnblogs.com/hangry/p/18470090

相关文章

  • chainlit 持久化配置问题 null value in column "disableFeedback" of relation "ste
    实际上此问题在github上已经存在了,解决方法很简单,就是对于sql配置的去掉不能为空的判定参考sql修改CREATETABLEIFNOTEXISTSsteps("id"UUIDPRIMARYKEY,"name"TEXTNOTNULL,"type"TEXTNOTNULL,"threadId"UUIDNOTNULL,"parentId"UUID,&qu......
  • Steps to remove a foreign key entry
    Herearethegeneralstepstoremoveaforeignkeyentry:Identifythetableandcolumnthatcontainstheforeignkeyconstraint.Disabletheforeignkeyconstrainttoallowthedeletionoftherelatedrecords.Thiscanusuallybedoneusingdatabasemanage......
  • elementUI Steps 步骤条样式修改
    1.修改前的效果2.修改后的效果2.实现代码<template><el-steps:active="active"align-center><templatev-for="iteminarrData"><el-step:key="item.id":title="item.name":class=&......
  • SciTech-Mathematics-Probability+Statistics-7 Steps to Mastering Statistics for D
    7StepstoMasteringStatisticsforDataScienceBYBALAPRIYACPOSTEDONJULY19,2024Astrongfoundationinstatisticsisessentialifyou’relookingtobecomeaskilleddatascientist.Fromanalyzingtrendsindatatobuildingpredictivemodelsandma......
  • 深度学习优化器:《Lookahead Optimizer: k steps forward, 1 step back》
    深度学习优化器:《LookaheadOptimizer:kstepsforward,1stepback》项目地址:https://github.com/michaelrzhang/lookaheadpytorch版本:https://github.com/michaelrzhang/lookahead/blob/master/lookahead_pytorch.py论文地址:https://arxiv.org/abs/1907.08610使用......
  • uni-app步骤条steps源码解析(十八)
    【背景】在显示中许多任务都不是一步执行完成的,需要分好多步进行;例如:网上购买一个商品需要先在网上下单-->当地物流人员取件-->中间物流转送--->目的地物流接收--->配送到买家手中;因此监控每个步骤的状态显的尤为重要。本期将为大家介绍步骤条控件steps。先看效果图:   ......
  • [ABC258Ex] Odd Steps 题解
    思路拿到这道题,第一时间肯定想到是\(dp\)题目。朴素DP用\(dp_i\)表示序列和为\(i\)的序列个数。因为原数组由奇数组成,所以\(dp\)只可能由\(dp_{i-1}\),\(dp_{i-3}\)等等转移过来,若\(i\inA\),\(dp_i=0\)。即:\[dp_i=\begin{cases}0&i\inA\\dp_{i-1}+dp_{i-3}+\c......
  • AdaBelief Optimizer: Adapting Stepsizes by the Belief in Observed Gradients
    目录概AdaBelief代码ZhuangJ.,TangT.,DingY.,TatikondaS.,DvornekN.,PapademetrisX.andDuncanJ.S.AdaBeliefOptimizer:Adaptingstepsizesbythebeliefinobservedgradients.NeurIPS,2020.概本文提出了一种Adam优化器上的改进,能够更加有效地设计......
  • [题解]AT_abc267_f [ABC267F] Exactly K Steps
    大家好,我是毒瘤,喜欢用玄学算法过题。发现题解区没有这个做法,于是来发一篇。思路不难发现如果一个点对\((u,v)\)的距离为\(d\),那么在这棵树以\(u\)为根时,\(v\)的深度为\(d\)。于是考虑换根DP。首先思考如何计算答案。显然我们可以将查询离线下来,然后当换根到以\(u\)......
  • Compilation Steps and Memory Layout of the C program
    TableofContentsTableofContentsWhatarethefourstagesofthecompilationprocess?PreprocessingCompilationAssemblyLinkingWhatarethefourstagesofthecompilationprocess?NormallycompilingaCprogramisamulti-stageprocessandut......