【BZOJ】2154:Crshの数字表

4408 ワード

http://www.lydsy.com/JudgeOnline/problem.php?id=2154
お願いします{i=1}{n}\sum_{j=1}^{m}lcm(i,j)$n,m<=1 e 7$
#include <bits/stdc++.h>

using namespace std;



typedef long long ll;

const int N=1e7+10, MD=20101009;

int p[N], pcnt, n, m;

bool np[N];

ll g[N];

void init() {

	g[1]=1;

	int i, j, t;

	for(i=2; i<=n; ++i) {

		if(!np[i]) p[++pcnt]=i, g[i]=1-i;

		for(j=1; j<=pcnt; ++j) {

			t=p[j]*i; if(t>n) break;

			np[t]=1;

			if(i%p[j]==0) { g[t]=g[i]; break; }

			g[t]=g[i]*(1-p[j]);

		}

	}

	for(i=2; i<=n; ++i) g[i]*=i;

	for(i=1; i<=n; ++i) g[i]+=g[i-1], g[i]%=MD;

}

int main() {

	scanf("%d%d", &n, &m); if(n>m) swap(n, m);

	init();

	ll ans=0, t1, t2;

	for(int i=1, pos=0; i<=n; i=pos+1) {

		pos=min(n/(n/i), m/(m/i));

		t1=((ll)(n/i)*(n/i+1)/2)%MD;

		t2=((ll)(m/i)*(m/i+1)/2)%MD;

		ans+=((g[pos]-g[i-1])*((t1*t2)%MD))%MD;

		ans%=MD;

	}

	printf("%lld
", ((ans%MD)+MD)%MD); return 0; }
  
ツッコミ:
お母さんは科学を信じられなくなりました。。。。。。この問題はどこで爆発しますか?どこで爆発しますか?分からないです。私は非常に卵が痛いです。QQ。
sbは間違っています。1:最後の割り算を忘れるのは整数QQとは限らないです。途中で必ず整数を確保して出てきます。
sbは間違っています。2:各種の爆発longlongは私に言葉がなくて、多すぎるmodを取るのはまたとても遅くなります。
そして、何をしていますか?なぜ私は$O(n^{0.5}+m^{0.5})$を調べましたか?それともそんなに遅くなりましたか?200 ms以上のものは何の神のやり方ですか?QQはブロック分けて表を打ちましたか?QQ
この問題はとても気持ちが悪いです。$O(n^{0.5}+m^{0.5})の調査を出すために10分間押しました。そして、様々なwaがQQを押し間違えたと思っています。
 
(公式を導き出す過程を書きたくない衝動QQが本当にあります。
下は全部$n(=m)にします
$sum_{i=1}{n}\sum_{j=1}lcm(i,j)=\sum_{i=1}{n}\sum_{j=1}{m}\fraac{ij}{(i,j)}$
その後、私たちは$d=(i,j)$を列挙したいのですが、ijドルはどうやって取ればいいのかを確認します。明らかに私たちは$iと$j$dだけを除いて、ドル(i/d,j/d)=1ドルでいいです。
$F(x,y)=\sum_{i=1}^{x}\sum_{j=1}^{y}ij[(i,j)=1]$
では、元の形になります
$sum{d=1}{n}\fraac{d^2 F(\flor\frac{n}{d}\r flor、\flash{m}{d}{d}{d}{d}{d}=\sum{d}d{d}d}d{n}d}d{n}F}
考慮して$F(x,y)$
$begin{align}F(x,y)&=\sum_{i=1}^{x}\sum_{u{j=1}^{y}ij[(i,j)=1]\\\==\sum_{i=1}{x}sum{u{u{j=1}{u{j=1}{y}{ij}{ij}iij}{sum}{sum}{{sum}{{_}{_}{_}{_}}}{{{_}{_}{_}{m}{_}{_}{_}{m}}{{_}{m}{{{_}}}{{{{{_}}{^{x}i\sum_{d}j\\\\n=\sum_{d=1}^{x}d^2\sum_{i=1}^lflor{x}i\flash{d}i\flash{d}i}i\flash{d}i}i}i\flashoord^2\frac{\lflor\\frac{x}\r flash(\lflor\frac{x}{d}\r flash+1)}{2}\frac{flash{y}{frar}{d}{flash}{flar}
得を持ち帰る
¥begin{align}&sum m{u{d=1}^n{n}d F(\lfflor\frar\frar{n}{n}{d}\r\ffffflor、\ffffffr{m}\r\r\\\r\\\r\\\\r\\r\\\r\\\r\\r\\\r\\\\\\\\\\r\\\r\\\\\\\\\\\\\\\\\\\\r\\\\\\\\\r\r\\\r\\\\\\\\\\\\\\r\\\\\r\\\\\\r\\\\\\\r\r{r\frac{n}{d}\r flor{i}flashr(\lflor\frac{lflor\frac{n}{d}{r flor}{1)}fflor(\lflor\fraac{\lflor\frar\frar\frar\frar{m}\r\r ffffflor{r\ffffr\\\\fffr\\\\\\ffrar\\\\\\\\\ffffffr\\\\\\\\\\\\\\\\fffffffffr\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\r{d{d{d{d{d{d=============={n n n n{n{n n}{d i}\r flor+1}{2}\frac{lflor\frac{m}{di}\r flor{m}{flar{di}+1}{2}\end{align}
今はもう$O(\sqrt n\s qrt n)=O(n)ドルで単独で調べられましたが、理想的ではないので、引き続きジェーン化します。
$T=d i$を作ると、i 124 T、d=T/iと指標が入れ替わります。
バージン{align}&sum_{d=1}^n{n}d\sum_{i=1}^{\lflor\frar{n}{n}{d}\fffffflor}\mu(i)i^2\fraac{ lfflor\ffflar\ffraac{ n}{n}{d i}{di}{di}{ fffffffffffffr\ffffffffffffffffffffffr\fffffr\ffffr\ffffffffffffr\fffffr\fffr\ffffr\fffff\ lflor\frac{m}{d i}\r+1}{2}\sum_{T=1}^frac{lflor\frac{n}{T}fflor(\lflor\frar\frar{m}\r frar+1){2}\sum_{i{i|T}\frar{T}{i}{i}i^2/\sum{u{T=1}\fraac{ lfffffr\ffffr\\ffffr\\ffffr\\\\\\ffffr\\\\fffffr\\\\\\\\\\\ffffffr\\\\\\\\\fffffr{{{{{{{{{{{{ffffffffffffffffffffffffffffr m}{T}\r flor(\lflor\frac{m}{T}\r flover+1)}{2}T\sum_{i|T}\mu(\i)i\end{align}$
を設定します。また$f(T)=\sum噬T'\mu(i)iを設定します。私達は$f(T)=\sum_{i|T}\mu(i)i$では、g(T)=Tf(T)$を設定します。
線形ふるいでは、外側は$k$kで、内側は$puyですので、f(kpuy)=\sum_{i_;kpuy]\mu(#i)i$puy($k)を求めます。ですので、i$iの数の因子に新しく加入した$puyは含まれません。このとき、答えは新しい($py)を含めます。以上のように、puy|kドルの場合は、答えは$f(k)$
$puy mid kの時に$iの取った数の因子の中に新しく加入した$puyを含まない場合、同じです。答えは$f(k)です。i$iの取った数の因子に新しく加入した$puyを含めると、指数は$1ですので、$i=appuyを考えています。
$は\begin{align}&sum_{i𞓜T}\mu(i)i\u=&sum_{aaaaauy𞓜kpy)\mu(aaaauy\aaaaauy\\\==puy\sum_{au{auu}k k}mu{mu{mu{mu{aau}}mu{mu{mu{aaau}}mu{mu{mu{mu{mu}}}}\mu{mu{mu{mu{aaaaau{aau{aau}}}[/[/[/[/[/[/[/[/[/[/b=mu=mu=mu}ign'$
以上、puy mid kドルの場合、答えは$
そして、線形ふるいで適当にやればいいです。最後の答えは。
$sum(\u{T=1}{n}\fraac{lflor\frac{n}{T}\r flash(\lflor\flar}{n}{T}{2}\flar}{2}\frac{m}{T}
ブロックに分けてやればいいです。