[bzoj3944]和

1つの <ビット/ STDC ++ H>の#include
 2の#include <TR1 / unordered_map>
 3  使用して 名前空間STD。
4  の#defineは長い長いっ 
 5  の#define N 5000005
 6  int型VIS T、N、ミュー[N]、[N]、P [N]。
7  LLのCP [N]。
8 TR1 :: unordered_map < int型、LL> M1。
9 TR1 :: unordered_map < int型int型 > 平方メートル。
10 LLのdjs_cp(int型N){
 11      であれば(N <= N- 5戻りCP [N];
12      もし(M1 [N])戻りM1 [N]。
13      LL ANS =(N + 1LL)* N / 2 14      のためには、int型、I = 2、J ;; I = J + 1 ){
 15          J = N /(N / I)。
16          ans- = djs_cp(N / I)*(J-I + 1 )。
17          であれば(j == n)の戻り M1 [N] = ANS。
18      }
 19  }
 20  INT djs_mu(INT N){
 21      であれば(N <= N- 5リターン・ミュー[N]。
22      であれば(M2 [N])戻りM2 [n]を、
23      INT ANS = 1 24      のためには、int型、I = 2、J ;; I = J + 1 ){
 25          J = N /(N / I)。
26          ans- = djs_mu(N / I)*(J-I + 1 )。
27          であれば(j == n)の戻り M2 [N] = ANS。
28      }
 29  }
 30  INT メイン(){
 31     MU [ 1 ] = CP [ 1 ] = 1 32     のためにINT I = 2;私は= N- < 5 ; iが++ ){
 33        なら!(VIS [i])とCP [I] = iが(MU [P [++ P [+ 0 ] = I] = - 1 )。
34        のためのint型 J = 1 ;(j <= P [ 0 ])&&(iは* P [j]が<= N- 5); J ++ ){
 35            VIS [iが* P [j] = 1 36            であれば(私%P [j] == 0 ){
 37                CP = CP [I] * [iがP [J] *] 、P [j]を。
38                ブレーク;
39            }
 40            - MU = [Iは、p [jを] *] ; MU [I]を
41           CP = CP [I] * [iがP [J] *](P [j]を- 1 )。
42        }
 43     }
 44     intは、I = 2、iは<= N- 5 ; iは++ ){
 45の         ミュー[i]が+ = MU [I- 1 ]。
46         CP [I] + = CP [I- 1 ]。
47     }
 48      のscanf(" %dの"、&T)。
49      一方(t-- ){
 50          のscanf(" %d個"、&N)
51          のprintf("%LLD%D \ n " 、djs_cp(N)、djs_mu(N));
 52      }
 53 }
コードの表示

 

おすすめ

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