其他分享
首页 > 其他分享> > 基础数论函数练习题

基础数论函数练习题

作者:互联网

先考虑怎么求lcm,考虑从序列后部插入一个数\(y\)的影响。
\(\frac{xy}{(x,y)}=x\frac{y}{(x,y)}\)
\(x\)是容易计算的,边算边取模即可。
\(\frac{y}{(x,y)}\)这个东西很难计算,因为\(x\)很大。
但是\((x,y)=(x%y,y)\),所以可以从左到右计算之前所有数乘起来模\(y\)的值。
一次时间复杂度\(O(n^2\log_2n)\)。
注意到我们插入后,答案肯定是原来的倍数。
考虑固定右端点\(l\),从左向右插入,令\(b_i\)表示插入\(i\)后原答案乘以的值。
则\(b_{l...r}\)的乘积就是区间\([l,r]\)的答案,这样子可以快速计算以某个数为左端点的答案。
\(b_i=\frac{a_i}{(a_i,x)}\),而\(x\)就是\(b_{l...r-1}\)的乘积
令\(c_i=\frac{a_i}{b_i}\),这实际上就是\(\gcd(a_{l...r-1})\),\(c_{i+1}=(a_i,x)\)。
暴力计算时间复杂度\(O(n^2\log_2V)\)
由于经典结论,\((a_i,x)\)从左到右最多只有\(\log_2V\)个,使用整除即可判定gcd是否会变化,最多只会变化\(\log_2V\)次。
时间复杂度优化到\(O(n^2+n\log_2^2V)\)

标签:练习题,...,2V,frac,函数,数论,复杂度,插入,log
来源: https://www.cnblogs.com/ctmlpfs/p/14543766.html