数论习题 2018.4
数学,数论
代码见这.
BZOJ.2440.完全平方数
题意即求第个无平方因子数。
无平方因子数(Square-Free Number),即分解之后所有质因数的次数都为1的数
可以想到莫比乌斯函数,假设是答案,那么有
(从这里能看出
的上界,后面的
肯定是
的,所以
)
二分一个
,求
中有多少个无平方因子数。
既然带着个平方就都开方。根据容斥,对于
中的质数,答案为
即对于奇数个质数平方贡献为负,偶数个贡献为正;若存在某个质因子的次数
,那么对答案没有影响(如
在计算
时统计了个数)。这也符合莫比乌斯函数的特点。那么答案可以写为:
BZOJ.2820.YY的GCD
求
带着
不舒服啊,令
,则
前面那部分好求,后面那部分如果能用前缀和求的话就容易了。事实上也是可以的。
令
,那么
对于每个
我们只需要暴力枚举约数
更新
就可以了。
复杂度(转自ppt by
):由
易知,每个质数更新时是均摊
的,而质数个数恰好为
,所以暴力枚举+维护前缀和的时间复杂度为
。
计算复杂度自然就是
了。
另外
好像是可以一起线性筛出来的。
参考。
对于这个式子,
- 时,有的因子的次数。
1.时,即。
2.时,因为的次数,所以为。
因此此时答案为。
- 时,有的质因子的次数为。
1.时,也是。
2.时,此时与互质,由的积性函数性质,可化为,,所以为。
因此此时答案为。
注意对于每个质数,;。
BZOJ.3529.数表
令表示的约数和,给定,多次询问,求
是一个积性函数,根据约数和定理可以线性筛出来。(
具体见这,好像比较麻烦,所以直接
求)
约数和定理:若,则
先考虑去掉的限制,
令
,
枚举
,把
放前边,
前半部分显然可以优化到
,对于后半部分和
之前一样,暴力枚举约数更新,然后求遍前缀和,复杂度
。
然后是
的限制,因为只有
的
才会对答案有贡献,所以我们将询问按
排序,
按
排序,每次询问将所有
的
插入,用树状数组维护前缀和。
(详细写一下,原先对于每个
,我们在预处理时要更新
的所有倍数的
,然后前缀和。现在根据
的大小依次更新
的倍数)
复杂度
。
另外对于取模相当于和取"与(&)"。因此对于这题不需要取模,用int
自然溢出然后最后答案对取与即可。(参考这。并不是很懂。。)
注意如果不是的话,得到的结果应是同余的(即可能是负的)。
小结
套路1:由,去枚举,化简出。
套路2:对于,令,得到。
套路3:枚举,把放前边,后面留下个。
反正都是满满的套路
BZOJ.4816.数字表格
这个好像简单些啊,只要不犯sb错误
用表示数列的第项,求
直接去枚举
,
同之前,枚举约数暴力更新
,复杂度
。(
)
注意次幂不能直接取模,利用费马小定理可以对
取模。
然后注意
。。
小结:
套路1:把换到幂上去,这样就有了。
套路2:令,在最外层枚举。
另外常见的就不再写了。
.
.
.
.
.
.