摘要: 考虑每个gcd对答案的贡献。这不好求。可以先求gcd至少是d时对答案的贡献(也就是gcd是d的倍数),然后再容斥回去。多次询问时,考虑预处理答案,从n-1向n递推,则只有d是n的约数会有变化,这样的d总量是O(n log n)的。但我们不能每次重新做一遍容斥。可以把容斥转化为给每个d一个贡献系数,这样d的贡献值变化时,只要拿变化量乘以系数即可。 阅读全文
posted @ 2020-08-06 23:49 duyiblue 阅读(267) 评论(1) 推荐(0) 编辑
摘要: 分k>sqrt(n)和k<=sqrt(n)两种情况。后者可以直接爆搜。前者,每个数里,至多只有一个不合法的质数,所以不合法的数总是就是sigma( i=k+1~n, [i是质数] floor(n/i) )。这个函数不好求,不过floor(n/i)只有O(sqrt(n))种取值,我们枚举floor(n/i)的值,转化为求区间里质数数量。而这个区间端点恰好又都是floor(n/i)的形式,可以用min25筛的前半部分筛出来 阅读全文
posted @ 2020-08-06 21:35 duyiblue 阅读(537) 评论(1) 推荐(0) 编辑
摘要: min25筛,用来求一个函数的前缀和。算法分成两个部分,前一部分用DP的思想筛出质数的贡献。后一部分把质数与合数的贡献加和。它不仅可以用来求很多数论函数的前缀和,它前后两部分的思想也经常单独出现在一些题目中。 阅读全文
posted @ 2020-08-06 21:19 duyiblue 阅读(1892) 评论(3) 推荐(3) 编辑