【Hdu6715]算術

我々は最初の式を知っている必要があります。$ \ムー(LCM(I 、J))= \ミュー(I)\ CDOT \ムー(J)\ CDOT \ムー(GCD(i、j)は)$( minが0の議論であるが)
ため$ D = GCD(I、J)$、$ N - '= \ lfloor N- / D \ rfloor $、$ M' = \ lfloor M / D \ rfloor $
$ \ SUM \ MU(LCM(I、J) )$
$ = \ sum_ {D = 1} ^ {N-} \ MU(D)\ sum_ {I = 1} ^ {N- '} \ MU(ID)\ sum_ {J = 1} ^ {M'} \ MU(JD)\ sum_ {Gミュー(G)\ | | I、G、J} $の
順序$ N '' = \ lfloor N '/ G \ rfloor $、$ M' '= \ lfloor M' / G \ rfloor $
$ = \ sum_ {D = 1} ^ {N-} MU(D)\ sum_ {G = 1} ^ {N- '} \ \ MU(G)\ sum_ {I = 1} ^ {N-'「} \ MU(IGD)\ sum_ {J = 1} ^ {M '}ミュー(JGD)の$ \
順序$ T = Gdの$
$ = \ sum_ {T = 1} ^ {N-} \ MU * \ MU(T) \ sum_ {i = 1} ^ {N ''}ミュー\(IT)\ sum_ {J = 1} ^ {M '}ミュー(JT)$ \
$の\のMU * \ミュー$、後者でありますそれはで、前処理の複雑さ$ O(nlnn)$、暴力的な尋問列挙トン、複雑$ 0(TN)$前処理することができます

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  の#define N 1000005
 4  int型VIS T、N、M、μ[N]、[N]、P [N]、MU2 [N]。
5ベクター< INT > MU3 [N]。
6つの 長い 長いANS。
7  INT GCD(int型のx、int型Y){
 8      であれば(!y)の戻りX。
9      戻り GCD(Y、Xの%のY)。
10  }
 11  INT メイン(){
 12      MU [ 1 ] = 1;
13      のためにint型 I = 2 ; iがN- < 4 ; iが++ ){
 14          であれば(!VIS [I]){
 15              P [++のp [ 0 ] = I。
16の              ミュー[I] = - 1 17          }
 18          のためにINT J = 1 ;(j <= P [ 0 ])&&(iは* P [j]が<N- 4); J ++ ){
 19              VIS [iがPを* [J] = 1 20              であれば(私の%のP [j] == 0 ){
 21                 ミュー[i *はp個の[jを]] = 0 ;
22                  ブレーク;
23              }
 24              - MU = [Iは、p [jを] *] ; MU [I]を
25          }
 26      }
 27      のためのint型 i = 1 ; iがN- < 4 ; I ++ 28          のためのINT J = 1 ; J <=(N- 5)/ I; J ++)MU2 [iがjは*] + = MU [I] * ミュー[J]。
29      のためには、int型 i = 1 ; iはN- < 4 ; iは++ ){
 30          MU3を[I] .push_back(MU [I])。
31          のためのint型、J = 2、J <=(N- 5)/ I; J ++)MU3 [I] .push_back(MU3 [i]は[J- 2 ] + MU [i *がJ])。
32      }
 33      のscanf(" %dの"、&T)。
34      一方(t-- ){
 35          のscanf(" %D%dの"、&​​N、&M)。
36の          ANS = 0 37          であれば(N> M)スワップ(N、M)。
38          のためにint型 i = 1 ; iが<= N; iが++)ANS + = 1LL * MU2 [I] * MU3 [I] [N / I- 1] * MU3 [I] [M / I- 1 ]。
39          のprintf(" %LLDする\ n " 、ANS)。
40      }
 41 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/PYWBKTDA/p/11406832.html