bzoj 2818 欧拉函数
设w[i]为1-i中gcd(i,j)=1的数对数,那么w[i]:=2*Σphi[i]+1,欧拉函数线性生成就行了
然后ans=Σw[n/prime[i]]是比较显然的事。。
/************************************************************** Problem: 2818 User: BLADEVIL Language: Pascal Result: Accepted Time:2672 ms Memory:156476 kb ****************************************************************/ //By BLADEVIL var n :longint; mindiv, prime :array[0..10000100] of longint; phi :array[0..10000100] of int64; i, j :longint; ans :int64; begin read(n); for i:=2 to n do begin if mindiv[i]=0 then begin inc(prime[0]); prime[prime[0]]:=i; mindiv[i]:=i; phi[i]:=i-1; end; for j:=1 to prime[0] do begin if i*prime[j]>n then break; mindiv[i*prime[j]]:=prime[j]; if i mod prime[j]=0 then begin phi[i*prime[j]]:=phi[i]*prime[j]; break; end else phi[i*prime[j]]:=phi[i]*(prime[j]-1); end; end; for i:=2 to n do phi[i]:=phi[i]+phi[i-1]; for i:=1 to n do phi[i]:=2*phi[i]+1; for i:=1 to prime[0] do ans:=ans+phi[n div prime[i]]; writeln(ans); end.