BZOJ2005能量采集
HJWJBSR
posted @ 2015年6月09日 19:17
in 题解
, 996 阅读
本来打算放到“数学相关”里面,但是太影响排版了,而且这种神题还是单独放比较好。
一共有四种做法:
首先题目可以化成一个2*ΣΣgcd(i,j)-nm是显然的,至于前面的求法听说有好几种做法
做法一:From KZF:
首先线性筛出欧拉函数,然后直接求解,时间也是线性的。
做法二:From 小狗:
对于左式可以将其化成
然后[n/x][m/x]可以分成O(sqrt(n)+sqrt(m))段,可以预处理u(x)前缀和在根号时间内求解
所以代入kzf的第一行的式子中O(nsqrt(n))级别的。
做法三:From wulala:
要求每个数是多少个数对的gcd,可以用类似容斥但更SB的方法:首先最多这个数可以作为(n/i)*(m/i)个数对的公因数,然后减去所有gcd是i的倍数的数对,所以时间复杂度就是Σn/i,也就是调和级数,O(n log n)
做法四:From KZF:
可以先预处理出n^(2/3)的F(n),然后将KZF最后面的那个式子分成根号块,每块求值据说是O(n^(1/6)),然后复杂度就喜闻乐见O(n^(2/3))
神奇的是,上面四种做法复杂度都不一样= =,但是水B的数据范围应该是都能让过的。