私はなぜオイラー関数で、最初の屯を理解していませんでした
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 typedefの長い 長いLL。 CONSTのLL MAXN = 4E6 + 5 。 constの LL MAX = 1E9; LL P [MAXN]。 【MAXN] PHI LL。 【MAXN] LL。 BOOL F [MAXN]。 LL K = 0 。 無効INITを() { PHI [ 1 ] = 1 。 以下のために(int型 I = 2 ; I <MAXN iは++ ) { 場合(!F [i])と { P [Kは++] = I; PHI [i]は = I- 1 。 } のための(int型 J = 0 ; J <K && iは* P [J] <MAXN; J ++ ) { PHI [iは?* P [J] = PHI [i]は*(私の%のP [j]をP [J] - 1 :P [J])。 F [iが * P [j] = 1 。 もし(I%P [j] == 0 ) { 破ります。 } } } } int型のmain() { int型のT。 その中に(); scanf関数(" %d個"、&T)。 LLのx; ANS LL; 一方、(T-- ) { scanf関数(" %のLLD "、&x)は、 ANS = 0 ; LLさt = SQRT(X)+ 1 、D。 一方、(T) { ANS + = X /(T * tの)* PHI [T]。 トン - ; } COUT << ANS << ' の\ n ' ; } }