[关闭]
@SovietPower 2018-04-04T12:24:46.000000Z 字数 5022 阅读 6389

数论习题 2018.4

数学,数论


代码见这.

BZOJ.2440.完全平方数

题意即求第个无平方因子数。

无平方因子数(Square-Free Number),即分解之后所有质因数的次数都为1的数

可以想到莫比乌斯函数,假设是答案,那么有


(从这里能看出的上界,后面的肯定是的,所以
二分一个,求中有多少个无平方因子数。
既然带着个平方就都开方。根据容斥,对于中的质数,答案为

即对于奇数个质数平方贡献为负,偶数个贡献为正;若存在某个质因子的次数,那么对答案没有影响(如在计算时统计了个数)。这也符合莫比乌斯函数的特点。那么答案可以写为:

BZOJ.2820.YY的GCD


  求




  带着不舒服啊,令,则

  前面那部分好求,后面那部分如果能用前缀和求的话就容易了。事实上也是可以的。
  令,那么

  对于每个我们只需要暴力枚举约数更新就可以了。
  复杂度(转自ppt by ):由

  易知,每个质数更新时是均摊的,而质数个数恰好为,所以暴力枚举+维护前缀和的时间复杂度为
  计算复杂度自然就是了。
  
  另外好像是可以一起线性筛出来的。参考

  对于这个式子,

BZOJ.3529.数表


  令表示的约数和,给定,多次询问,求



  是一个积性函数,根据约数和定理可以线性筛出来。(具体见这,好像比较麻烦,所以直接求)

约数和定理:若,则

  先考虑去掉的限制,




  令

  枚举,把放前边,

  前半部分显然可以优化到,对于后半部分和之前一样,暴力枚举约数更新,然后求遍前缀和,复杂度
  然后是的限制,因为只有才会对答案有贡献,所以我们将询问按排序,排序,每次询问将所有插入,用树状数组维护前缀和。
  (详细写一下,原先对于每个,我们在预处理时要更新的所有倍数的,然后前缀和。现在根据的大小依次更新的倍数)
  复杂度

  另外对于取模相当于和取"与(&)"。因此对于这题不需要取模,用int自然溢出然后最后答案对取与即可。(参考这。并不是很懂。。)
  注意如果不是的话,得到的结果应是同余的(即可能是负的)。


小结
套路1:由,去枚举,化简出

套路2:对于,令,得到

套路3:枚举,把放前边,后面留下个

反正都是满满的套路


BZOJ.4816.数字表格

  这个好像简单些啊,只要不犯sb错误

  用表示数列的第项,求




  直接去枚举

  同之前,枚举约数暴力更新,复杂度。()
  注意次幂不能直接取模,利用费马小定理可以对取模。
  然后注意。。

小结:
套路1:把换到幂上去,这样就有了。

套路2:令,在最外层枚举

另外常见的就不再写了。

.
.
.
.
.
.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注