题目大意:有个一开始为空的序列。每次操作会往序列最后加一个 1 1 1 到 m m m 的随机整数。当整个序列的 gcd \gcd gcd 为 1 1 1 时停止。问这个序列的期望长度对 1 0 9 + 7 10^9+7 109+7 取模的值。
1.对于 50 % 50\% 50% 的数据 : 1 ≤ m ≤ 1000 1≤m≤1000 1≤m≤1000
令 f [ i ] f[i] f[i] 表示当前的 g c d gcd gcd 为 i i i (第一个位置的数为 i i i 开始),到序列所有的 g c d gcd gcd 为 1 1 1 的状态的期望步数,初值 f [ 1 ] = 0 f[1] = 0 f[1]=0,那么它的转移方程就是:
f [ i ] = 1 m ∗ ∑ j = 1 m ( f [ gcd ( i , j ) ] + 1 ) = 1 + 1 m ∗ ∑ j = 1 m f [ gcd ( i , j ) ] f[i]=\dfrac{1}{m}*\sum\limits^m_{j=1}{(f[{\gcd(i,j)}]+1)} =1 +\dfrac{1}{m}*\sum\limits^m_{j=1}f[{\gcd(i,j)}] f[i]=m1∗j=1∑m(f[gcd(i,j)]+1)=1+m1∗j=1∑mf[gcd(i,j)],
然后我们把 i = = gcd ( i , j ) i==\gcd(i,j) i==gcd(i,j) 这种提出来:
得到: f [ i ] = 1 + 1 m ∗ ∑ j = 1 , i ∤ j m f [ gcd ( i , j ) ] + 1 m ∗ f [ i ] ∗ ⌊ m i ⌋ f[i] = 1+\dfrac{1}{m}*\sum\limits^m_{j=1,i\nmid j}f[{\gcd(i,j)}] +\dfrac{1}{m}* f[i]*\lfloor\frac{m}{i}\rfloor f[i]=1+m1∗j=1,i∤j∑mf[gcd(i,j)]+m1∗f[i]∗⌊im⌋
然后移项得: f [ i ] = 1 + 1 m ∗ ∑ j = 1 , i ∤ j m f [ gcd ( i , j ) ] 1 − ⌊ m i ⌋ ∗ 1 m f[i]=\dfrac{1+\dfrac{1}{m}*\sum\limits^m_{j=1,i\nmid j}f[{\gcd(i,j)}]}{1-\lfloor\frac{m}{i}\rfloor*\dfrac{1}{m}} f[i]=1−⌊im⌋∗m11+m1∗j=1,i∤j∑mf[gcd(i,j)]
然后求出 f [ 1 − m ] f[1-m] f[1−m] ,第一步每个情况都有 1 m \dfrac{1}{m} m1 的概率走到,
所以最终答案为: a n s = ∑ i = 1 m f [ i ] m + 1 ans=\dfrac{\sum\limits^m_{i=1}f[i]}{m} + 1 ans=mi=1∑mf[i]+1
对于求每个 f [ i ] f[i] f[i] ,这里暴力求 ,复杂度 O ( m 2 l o g 2 m ) O(m^2log_2m) O(m2log2m)
2.对于 100 % 100\% 100% 的数据 : 1 ≤ m ≤ 100000 1≤m≤100000 1≤m≤100000
考虑快速求出 gcd \gcd gcd ,我们套路地枚举 gcd \gcd gcd,设 g ( i , j ) g(i,j) g(i,j) 表示有多少个 1 ≤ x ≤ m 1\le x\le m 1≤x≤m 满足 gcd ( i , x ) = j \gcd(i,x)=j gcd(i,x)=j。
那么就有:
f [ i ] = 1 + 1 m ∗ ∑ j ∣ i f [ j ] ∗ g ( i , j ) 1 − ⌊ m i ⌋ ∗ 1 m f[i]=\dfrac{1+\dfrac{1}{m}*\sum\limits_{j|i}f[j]*g(i,j)}{1-\lfloor\frac{m}{i}\rfloor*\dfrac{1}{m}} f[i]=1−⌊im⌋∗m11+m1∗j∣i∑f[j]∗g(i,j)
然后考虑求 g ( i , j ) ( j ∣ i ) g(i,j)(j|i) g(i,j)(j∣i)。
g ( i , j ) = ∑ x = 1 m [ gcd ( i , x ) = j ] g(i,j)=\sum\limits^m_{x=1}[\gcd(i,x)=j] g(i,j)=x=1∑m[gcd(i,x)=j]
g ( i , j ) = ∑ x = 1 ⌊ m j ⌋ [ gcd ( i j , x ) = 1 ] g(i,j)=\sum\limits^{\lfloor\frac{m}{j}\rfloor}_{x=1}[\gcd(\frac{i}{j},x)=1] g(i,j)=x=1∑⌊jm⌋[gcd(ji,x)=1]
因为
∑ d ∣ n u ( d ) = [ n = 1 ] \sum_{d|n}u(d)= [n=1] d∣n∑u(d)=[n=1]
这里把 n n n 换成 gcd ( i j , x ) \gcd(\frac{i}{j},x) gcd(ji,x) 得到
g ( i , j ) = ∑ x = 1 ⌊ m j ⌋ ∑ d ∣ gcd ( i j , x ) μ ( d ) g(i,j)=\sum\limits^{\lfloor\frac{m}{j}\rfloor}_{x=1}\sum\limits_{d|\gcd(\frac{i}{j},x)}\mu(d) g(i,j)=x=1∑⌊jm⌋d∣gcd(ji,x)∑μ(d)
g ( i , j ) = ∑ d ∣ i j μ ( d ) ∑ d ∣ x ⌊ m j ⌋ 1 g(i,j)=\sum\limits_{d|\frac{i}{j}}\mu(d)\sum\limits^{\lfloor\frac{m}{j}\rfloor}_{d|x}1 g(i,j)=d∣ji∑μ(d)d∣x∑⌊jm⌋1
g ( i , j ) = ∑ d ∣ i j μ ( d ) ⌊ m j d ⌋ g(i,j)=\sum\limits_{d|\frac{i}{j}}\mu(d)\lfloor\dfrac{m}{jd}\rfloor g(i,j)=d∣ji∑μ(d)⌊jdm⌋
然后最终就等于:
f [ i ] = 1 + 1 m ∗ ∑ j ∣ i f [ j ] ∗ ∑ d ∣ i j μ ( d ) ⌊ m j d ⌋ 1 − ⌊ m i ⌋ ∗ 1 m f[i]=\dfrac{1+\dfrac{1}{m}*\sum\limits_{j|i}f[j]*\sum\limits_{d|\frac{i}{j}}\mu(d)\lfloor\dfrac{m}{jd}\rfloor}{1-\lfloor\frac{m}{i}\rfloor*\dfrac{1}{m}} f[i]=1−⌊im⌋∗m11+m1∗j∣i∑f[j]∗d∣ji∑μ(d)⌊jdm⌋
复杂度大概 O ( m ∗ m ) O(m*\sqrt{m}) O(m∗m)