ZROJ 1267 我要打数论

ZROJ 1267 我要打数论

这个题目来源是一个同学开麦对线,说我要打麻将我要打扑克

应clb要求题目不能直接放出来,但是真的感觉太棒了学到许多所以总结一下

分析一波,取min可以转化

\[\sum^n_{i=1}\sum^n_{j=1}min(n,lcm(i,j)+gcd(i,j)) \]

\[=\sum_k^n\sum^n_{i=1}\sum^n_{j=1}[k\leq lcm(i,j)+gcd(i,j)] \]

这是一种常见的min转换方法(我并不知道

继续转化,

\[=\sum_k^n n^2-\sum^n_{i=1}\sum^n_{j=1}[k> lcm(i,j)+gcd(i,j)] \]

\[=\sum_k^n n^2-\sum^{k}_{i=1}\sum^{k}_{j=1}[k> lcm(i,j)+gcd(i,j)] \]

大于有更好的性质,后面的式子上界为k-1,后面就只和k有关了,令其为\(F(n)\),即

\[F(n)=\sum_i\sum_j [n>lcm(i,j)+gcd(i,j)] \]

考虑一个差分,\(G(n)=F(n+1)-F(n)\),小于n+1又大于等于n,只能等于n

\[G(n)=\sum_i\sum_j [lcm(i,j)+gcd(i,j)=n] \]

考虑枚举\(d=gcd(i,j)\)

\[=\sum_g^n \sum_i^{\left\lfloor\frac{n}{g}\right\rfloor}\sum_j^{\left\lfloor\frac{n}{g}\right\rfloor}[ijg+g=n][gcd(i,j)=1] \]

因为\(n=ijg+g\),则有解的话\(g|n\),所以

\[=\sum_{g|n} \sum_i^{\left\lfloor\frac{n}{g}\right\rfloor}\sum_j^{\left\lfloor\frac{n}{g}\right\rfloor}[ijg+g=n][gcd(i,j)=1] \]

其中\(ijg+g=n\),则 \(i=\frac{\frac{n}{g}-1} j\) ,枚举i,式子就变成了

\[=\sum_{g|n} \sum_{i|\frac{n}{g}-1}[gcd(i,\frac{\frac{n}{g}-1} i)=1] \]

发现式子只和\(\frac n g -1\)有关了,则令\(H(n)=\sum_{i|n} [gcd(i,n/i)=1]\) (禁止套娃!

这个东西就等于\(2^{w(n)}\),因为每种因子都要取完,就可以当成01分析

然后就做完了。。。总复杂度\(O(T+n\log n)\)

代码就不贴了

posted @ 2020-02-06 22:30  lcyfrog  阅读(213)  评论(0编辑  收藏  举报