P1829 [国家集训队] Crash的数字表格 / JZPTAB
有点难度的题目。
一眼看到 \(\gcd(i,j)\) 就用了 \(\phi\) , 结果死了。
用莫比乌斯函数套进去搞一搞先 :
\[\begin{aligned} & \sum\limits^n_{i=1} \sum\limits^m_{j=1} \text{lcm}(i,j) \\ = &\sum\limits^n_{i=1} \sum\limits^m_{j=1} \frac {ij}{\gcd(i,j)} \\ = & \sum\limits^{\min\{n,m\}}_{k=1} \sum\limits^n_{i=1} \sum\limits^m_{j=1} \frac{ij}{k} [\gcd(i,j)=k] \\ = & \sum\limits^{\min\{n,m\}}_{k=1} \sum\limits^{\left\lfloor \frac n k \right\rfloor}_{i=1} \sum\limits^{\left\lfloor \frac m k \right\rfloor}_{j=1} \frac{(ik)(jk)}{k} [\gcd(i,j)=1] \\ = & \sum\limits^{\min\{n,m\}}_{k=1} \sum\limits^{\left\lfloor \frac n k \right\rfloor}_{i=1} \sum\limits^{\left\lfloor \frac m k \right\rfloor}_{j=1} ijk \sum\limits_{d|\gcd(i,j)}\mu(d) \\ = & \sum\limits^{\min\{n,m\}}_{k=1} \sum\limits^{\min\{\left\lfloor \frac n k \right\rfloor,\left\lfloor \frac m k \right\rfloor\}}_{d=1} \mu(d) \sum\limits^{\left\lfloor \frac n k \right\rfloor}_{i=1} \sum\limits^{\left\lfloor \frac m k \right\rfloor}_{j=1} ijk [d|i] [d|j] \\ = & \sum\limits^{\min\{n,m\}}_{k=1} \sum\limits^{\min\{\left\lfloor \frac n k \right\rfloor,\left\lfloor \frac m k \right\rfloor\}}_{d=1} \mu(d) \sum\limits^{\left\lfloor \frac n {kd} \right\rfloor}_{i=1} \sum\limits^{\left\lfloor \frac m {kd} \right\rfloor}_{j=1} ijkd^2 \\ = & \sum\limits^{\min\{n,m\}}_{k=1} k \sum\limits^{\min\{\left\lfloor \frac n k \right\rfloor,\left\lfloor \frac m k \right\rfloor\}}_{d=1} d^2\mu(d) \left( \sum\limits^{\left\lfloor \frac n {kd} \right\rfloor}_{i=1} i \right) \left( \sum\limits^{\left\lfloor \frac m {kd} \right\rfloor}_{j=1} j \right) \\ = & \sum\limits^{\min\{n,m\}}_{T=1} \left( \sum\limits^{\left\lfloor \frac n T \right\rfloor}_{i=1} i \right) \left( \sum\limits^{\left\lfloor \frac m T \right\rfloor}_{j=1} j \right) \sum\limits_{d|T} d^2\mu(d) \frac{T}{d} \\ = & \sum\limits^{\min\{n,m\}}_{T=1} T \left( \sum\limits^{\left\lfloor \frac n T \right\rfloor}_{i=1} i \right) \left( \sum\limits^{\left\lfloor \frac m T \right\rfloor}_{j=1} j \right) \sum\limits_{d|T} d\mu(d) \end{aligned}
\]
我们发现如果 \(T\sum\limits_{d|T} d\mu(d)\) 可以进行预处理的话那么这个式子就是 \(O(n^{\frac{1}{2}})\) 的。
我们设 \(\text F(T)=\sum\limits_{d|T} d\mu(d)\) , 是一个积性函数 : \(\mu\) 是积性函数 , \(\sum\limits_{d|T}=\sum\limits_{x|T,y|T,x \perp y} xy\) , 得证。
那么我们就可以知道 \(\text F(Tp)=\text F(T) \times \text F(p)\) ( \(p \in prime\) ) 。我们又可以知道 \(\text F(p)=1+(-p)=1-p\) , 注意到这个有质数贡献的导向 , 所以可以欧拉筛。
最后记得把 \(T\) 乘进去并且取前缀和。时间复杂度 \(O(n+n^{\frac{1}{2}})\)。
Uses math;
Const
total=10000000+10;
modn=20101009;
var
isprime:array[-1..total] of boolean;
prime:array[-1..total] of longint;
incea:array[-1..total] of int64;
i,j,n,m:longint;
ans:int64;
function Square(n:longint):longint; begin exit(n*(n+1) >> 1 mod modn); end;
procedure Incea_make(total:longint);
var i,j,k,tail:longint;
begin
incea[1]:=1; tail:=0;
for i:=2 to total do
begin
if isprime[i]=False then begin inc(tail); prime[tail]:=i; incea[i]:=1-i; end;
for j:=1 to tail do
begin
if prime[j]*i>total then break;
isprime[prime[j]*i]:=True;
if (i mod prime[j]=0) then begin incea[prime[j]*i]:=incea[i] mod modn; break; end
else incea[prime[j]*i]:=incea[i]*incea[prime[j]] mod modn;
end;
end;
for i:=1 to total do incea[i]:=(incea[i]*i mod modn+incea[i-1]) mod modn;
end;
begin
read(n,m); Incea_make(max(m,n)+1);
i:=1; j:=0;
repeat
j:=min(n div (n div i),m div (m div i));
inc(ans,(Square(n div i)*Square(m div i) mod modn)*(incea[j]-incea[i-1]) mod modn);
ans:=ans mod modn; i:=j+1;
until i>min(n,m);
writeln((ans+modn) mod modn);
end.
坑点 : 最后记得 \((ans+modn) \mod modn\) !! 不然爆负数
完结撒花!✿✿ヽ(゚▽゚)ノ✿