[hdu6588]機能

SQRTの\順序$ M = \ lfloor [3] {N-} \ rfloor-。1 $ 
   $ \ sum_ {I = 1} ^ {N-} GCD(床(\のSQRT [3] {I})、I)$
= $ \ sum_ {i = 1} ^ {M} \和\ limits_ {J = ^ {3}} ^ {(I + 1)^ {3} -1} GCD(I、J)+ \和\ limits_ { I =(M + 1)^ {3}} ^ {n}はGCD(M + 1、i)は$
式の接頭辞を考慮し、すなわち、
   $ \ sum_ {I = 1} ^ {n}はGCD(M、I )$(式Mと無関係Nと前回)
= $ \ sum_ {D | M} D \ 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 | I} \ varphi(T)の\ CDOT(((I + 1)^ {3} -1)/ T-(I ^ 3 -1)/ T)$
= $ \ sum_。1 = {T mを} ^ {} \ varphi(T)\ sum_ {I ^ = {M} 1 / T}((+イット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  使用して 名前空間STDを、
3  の#define N 10000005
 4  の#define MOD 998244353
 5  の#define LL __int128
 6  int型のT、M、ANS、S1 [N]、S2 [N]、VIS PHI [N]、[N]、P [N]。
7  チャー S [ 101 ]。
8  INT メイン(){
 9つの      s1は、[ 1 ] = 3 ;
10の      S2 [ 1 ] = 4 11の      PHI [ 1 ] = 1 12      のためにint型、I = 2 iがN- <; 4 ; iは++ ){
 13          、S1 [I] =(S1 [I- 1 ] + 3LL * iは* I)%MOD。
14の          S2 [i]は=(S2 [I- 1 ] + 3LL * I + 1)%MOD。
15          であれば(!{VIS [i])と
 16              P [++のp [ 0 ] = I。
17              PHI [i]は= I- 1 18          }
 19          のためにINT J = 1 ;(j <= P [ 0 ])&&(iは* P [j]が<N- 4); J ++ ){
 20             VIS [i *はp個の[jを]] = 1 ;
21              もし(I%のP [J])PHI = PHI [I] * [iがP [J] *](P [j]を- 1 )。 
22              {
 23                  PHI [i]は* = PHI [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]は、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 ; iが++ 37              場合((M + 1)%I == 0((LL)(M + - )ANS =(ANS +(N / I 1)*(M + 1)*(M + 1) - 1)/ I)%のMOD * PHI [i])と%モッズ;
38          のためにint型 I = 1を ANS%=([i]は*(1LL * iはS1 [M / I] + S2 [M / I] + MOD)を* ANS + 1LLの*のファイ)iが++; I <= M)モッズ;
39          のprintf(" %d個の\ n " 、ANS)。
40      }
 41 }
コードの表示

 

おすすめ

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