[2019HDU初のマルチ学校] [HDU 6588] [K.機能]

トピックへのリンク:http://acm.hdu.edu.cn/showproblem.php?pid=6588

タイトル効果:シーク\(\ sum_ {i = 1} ^ {n}はGCD(\左\ lfloor \ SQRT [3] {I} \右\ rfloor、I)、\ n個の\の当量10 ^ {21} \)

溶液:考える\ \(\ sum_ {i = 1} ^ {\ \ SQRT \ lfloor左[式に変換し、ブロック(\ \ lfloor \ SQRT [3] {I}右\ \ rfloor \を左) 3] {N} \右\ rfloor} \ sum_ {J = ^ 3} ^ {(I + 1)^ 3-1} GCD(I、J)\)

   関数\ \(GCD(X、Y)= GCD(X \ MOD \ Y、Yので(F(N、M)= \ sum_ {i = 1} ^ {M} GCDを(N、I)\)、検討)\)、誘導することができる$$のF(N、M)= \ sum_ {i = 1} ^ {M} GCD(N、I)= \左\ lfloor \ FRAC {M} {N} \右\ rfloor \ CDOTのF(N、N)+ F(nは、MODの\ n \ M)$$

   値について\(fが(N、N)\)\(GCD \)由来の和の値で列挙することができる\(F(N、N)= \ sum_ {D | N} ^ {} D \ CDOT \ PHI(\ FRAC {n}は{D})\)、オイラー関数の値は、線形プリスクリーニング\(O(nlogn)\)全ての前\(F(N、N)\)の値とすることができます

   对于\(F(N、M)\)、同样可以得出、\(F(N、M)= \ sum_ {D | N} ^ {} D \ sum_ {I | \ FRAC {n}は{D} 、I MU \ \当量\左\ lfloor \ FRAC {M} {D} \右\ rfloor} ^ {}(I)\ CDOT \左\ lfloor \ FRAC {M} {ID} \右\ rfloor = \ sum_ {D | N} ^ {} \ PHI(D)\ CDOT \左\ lfloor \ FRAC {M} {D} \右\ rfloor \)

   また、ので、\は、((I + 1)^ 3-1 = I ^ 3 + 3I ^ 2 + 3I \)、(Iは\)各サイクル\のためにそこに、複数の\(Iは\)であるので、$$ \ sum_ {J = ^ 3} ^ {(I + 1)^ 3-1} GCD(I、J)= F(I、I ^ 3 + 3I ^ 2 + 3I)-f(I、I ^ 3 )+ GCD(I、I ^ 3)=(3I + 3)\ CDOT F(I、I)+ I $$

   従って、各質問のために、多くとも一度だけ必要\(F(N、M)\)(すなわち、最後の\(Iは\))のような、\のために(F(N、M)\)時間計算度\(O(\ SQRT {N})\)、そのため、各クエリの複雑\である(O(N + \ SQRT {N})\)。そして^ 7 10(\(n-は\)\を指し、セット質問複数のオフライン処理を削減全体の時間複雑度\(O(nlogn + T \のSQRT {N})\)を考慮することができるため\)

   人々の話題は、この質問はもともとカード非線形のアプローチだったが、ある一定の最適化によって可能に\(O(nlogn)\)の実践を通して

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  の#define N 10000001
 4  の#define MOD 998244353
 5  int型 N、G [N]、PHI [N]、P [N]、CNT、RES [ 15 ]、FLG [N]。
6  構造体RUA
 7  {
 8      int型のID;
9      __int128 N。
10      ブール 演算子 <(CONSTの RUA&T)のconst { 戻り N < TN;}
 11 } [ 15 ]。
12  ボイド読み取り(__ int128&X)
 13  {
 14      静的 チャー CH。静的 ブールNEG。
15      のために(CH = NEG = 0 ; CH < ' 0 ' || ' 9 ' <CH; NEG | = CH == ' - '、CH = GETCHAR())。
16      のための(X = 0 ; ' 0 ' <= CH && CH <= ' 9 ' ;(X * = 10)+ = CH- ' 0 '、CH = GETCHAR())。
17      のx = NEG - ?X:X;
 }
 19  ボイドpretype()
 20  {
 21      PHI [ 1 ] = 1 22      のためには、int型、I = 2 ; iがNを<; iは++ 23        {
 24        場合のp [++ CNT] = I、PHI [i]は= I-(FLG [I]!)1 25        のためのint型 J = 1 ; J <= CNT && iは* P [j]は<N; J ++ 26          {
 27          FLGが[iが* P [j] = 1 28          もし(I%のP [j] == 0 29            {
 30           PHI = P [j] * [iがj]を[Pを*] [i]はPHI。
31            ブレーク;
32            }
 33          PHI =(P [J] - [Iは、p [j] *] 1)* [I] PHIを。
34          }
 35        }
 36      のためにINT D = 1、D * D <Nを; D ++ 37        のためのINT ; N <N N + = = D * DのN D)
 38          {
 39          G [N] =(G [N ] + 1LL * D * PHI [N / D])%MOD。
40          であれば(D *はdの<N)G [N] =(G [N] + 1LL×(N / D)* PHI [D])%MOD。
41          }
 42  }
43インラインINT F(int型nは、__ int128のM)
 44  {
 45      INT RES =(M / N)* G [N]%MOD。
46      INT M = M%N。
47      もし(m個の== 0戻りRES。
48      のためには、int型 i = 1 ; iが* I <= N; iは++ 49        {
 50        のint J = N /(N / I)。
51        であれば(N%I == 0 52          {
 53の          ([I] *(M / I)RES + 1LL * PHI)%のRES = MOD。
54         場合のRES =(iはiがn <*)(RES + 1LL * PHI [N / I] *(M /(N / I)))%MOD。
55          }
 56        、I = J。
57        }
 58の     リターンRES。
59  }
 60  のint main()の
 61  {
 62      pretype()。
63      のscanf(" %d個"、&N) 
64      のためには、int型 i = 1 ; iがn = <; iは++ 65        リード([I] .N)を、[I] .ID = I。
66      ソート(A + 1、+ N + 1 )。
67     int型 ANS = 0、J = 1 ;
68      __int128 I = 1 69      一方(iは* I <= [N] .N)
 70        {
 71        __int128 R =((I + 3)* I + 3)* I。
72件        のANS =(ANS + MOD-(iは[I]%MODグラム*)+ I)%MOD。
73        一方(j <= N && [J] .N < R)
 74          {
 75          RES [J] .ID] =(ANS + F(I、[J] .N%I)+([ J] .N / I)* G [i])と%MOD。
76          J ++ ;
77          }
 78        のANS =(ANS +((I +3)* I + 3)* G [i])と%MOD。
79        一方(j <= N && [J] .N == R)
 80の          RES = [J ++] ID] ANS。
81        私は++します;
82        }
 83      のためのint型 i = 1 ; iが<= N; iが++ 84        のprintf(" %d個の\ n " 、RES [I])。
85 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/DeaphetS/p/11228116.html