SQRT의 \ 주문 $ m = \ lfloor [. 3] {N-} \ rfloor-. 1 $
$ \ sum_ {I =. (1)} ^ {N-} GCD (층 (\의 SQRT [. 3] {I}), I) $
= $ \ sum_ {I = 1} ^ {m} \ 합계 \ limits_ {J = I ^ {3}} ^ {(I + 1) ^ {3} -1} GCD (I, J) + \ 합계 \ limits_ { 난 = (m + 1) ^ {3}} ^ {N} GCD (m + 1, i)는 $
수식하고, 즉 접두사 고려
$ \ sum_을 {I = 1} ^ {N} GCD (m, I ) $ (화학식 m 및 n은 이전 무관)
= $ \ sum_ {D | D m} \ {sum_. I = 1} ^ {N / D} \ varepsilon (GCD (I, M / D)) $
= $ \ sum_ {T | m} \ MU (T) \ sum_ {DT | m} N- / DT \ CDOT D $
= $ \ sum_ {T | m} N- / T \ sum_ {D | T} D \ CDOT \ MU (T / D) $
= $ \ sum_ {T | N-m} / T \ CDOT \ varphi $ (T)
$ \ varphi $ 선형 자체의 원래 공식 후반은 O (m)가 사용될 수있다 고려 전반
= $ \ sum_ {I = 1 } ^ {m} \ sum_ {T | 저는} \ varphi (T) \ cdot (((I + 1) ^ {3} -1) / T- (I ^ 3 -1) / T) $
= $ \ sum_. 1 = {T의 m} ^ {} \ varphi (T) \ sum_ {I ^ = {m}. 1 / T} ((+ IT. 1) ^ {-1}이된다. (3) ) / T- (IT ^ 3-1) / T $
= $ \ sum_. 1 = {T의 m} ^ {} \ varphi (T) \ sum_ {I}. ^ 1 = {m / 3Ti T} ^ {2} 3I + + 1 개 $
이것도는 O 수 (m) 계산된다 (후자는 화학식이 설정 될 수 있고, 시그마 전처리 될 수있다), 즉 O (m)의 총 시간 복잡도
1 #INCLUDE <. 비트 / stdc ++ H> 2 사용 스페이스 성병; 3 #DEFINE N 10,000,005 4 #DEFINE의 개조 998,244,353 5 #DEFINE의 LL __int128 6 INT의 T, m, ANS, S1 [N], S2 [N], 피 힘 [N], [N], P [N]; 7 문자 들 [ 101 ]; 8 INT 의 main () { 9 개 (S1)는 [ 1 ] = 3 ; 10 [S2 1 ] = 4 ; (11 개) (φ) [ 1 ] = 1 ; 12 대 (int로 I = 2 나 N- <; 4 ; 내가 ++ ) { 13 S1 [I] = (S1 [I- 1 ] + 3LL * 난 * I) % 개조; 14 S2 [I] = (S2 [I- 1 ] + 3LL * I + 1 ) %의 모드; 15 의 경우 (! 힘 [I]) { 16 (P) [P ++의 [ 0 ] = I; (17 개) (φ) [I] = I - 1 ; 18 } 19 대 ( INT J = 1 , (j <= P [ 0 ]) && (I *는 P [J] <N- 4 )] J ++ ) { 20 힘 [내가 * P의 [j를] = 1 ; (21) 만약 피 (I %의 P는 [의 j]가) 나 P를 * [J] 피 = [I] * (p에 [j를] - 1 ); 22 다른 { 23 (φ)은 피 = [I] * [내가 [J]을 P *] , P [J] (24) 휴식 ; 25 } 26 } 27 } 28 는 scanf ( " %의 D ' , T); 29 일 동안 (T-- ) { 30 는 scanf ( " %의 S ' , S); 31 LL N = 0 ; (32) 에 대한( int로 I = 0 ; S [I]가, 난 ++) N = N * 10 + (S [I] - ' 0 ' ); 33 대 (m = 1 (LL)의 m * m 개의 *의 m <= N; m ++ ); 34 M- = 2 ; 35 INT ANS = 0 ; (36) 에 대한이 ( int로 I = 1 ; i가 =의 m + < 1 내가 ++; ) (37) 의 경우 ((m은 + 1 ) % I == 0 ((LL) (m + -) ANS = (ANS + (N / I (1) ) * (m + 1 ) * (m + 1 ) - 1 ) / I) %의 개조 피 * [I]) %모드; (38) 에 대한이 ( int로 난 = 1 ANS = (ANS + 1LL * 피 [내가] * (1LL * 난 * S1 [m / 난] + S2 [m / 난] + 개조)) %를; I <= m 내가 ++) 모드; 39 의 printf ( " % D \ 없음 " , ANS); 40 } 41 }