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 }