Counting Rhyme
这道题目就是因为对数论容斥不熟悉导致的。。。之前也做到过
看这篇题解
首先这篇题解用到了一个很大的纲领:公约数是最大公约数的约数
然后看下\(g_k\)怎么求:由于\(g_k\)表示的是\(k|gcd(a_i,a_j)\)的对数,相当于\(k\)是\(a_i,a_j\)的公约数,所以我们把数组中\(k\)的倍数全部标出来,统计总共的个数,然后从这些里面随便选两个(组合数)就好了
像“Small GCD”这道题目一样,离散的结构可以考虑数论容斥呀。尽管这道题目全程没有出现gcd,但是公约数的话也可以往这方面想
update 2024.8.3
想到一种新做法,也是用了数论容斥
考虑计算不符合题目条件的对数,枚举\(a_j\)
可以用数论容斥来唯一确定一对数。设\(gcd(a_i,a_j)=d\),则\(d\)是\(a_j\)的约数,用数论容斥可以求出来有多少对;如果数列中存在\(a_k|d\),那么这些对显然都不行,反之都行,于是可以计算
所以数论容斥的作用就是用来唯一确定一对数的,以后这种计算点对的可以想数论容斥