オーバー-10Sローカル、Bzoj 20代はダウンを実行されていません......
コード:
#include <ビット/ STDC ++。H> に#define setIO(S)freopenは(S ".IN"、 "R"、STDIN) の#define MAXN 1000006 の#define M 1000004 の#define合計(N)(1LL *(1LL N * * 1LL *(N + 1))/ 2) の#define LLが長い長い の#define O2 __attribute __(((最適化" - O2を"))) 使用して名前空間std。 するchar * P1、P2 *、BUF [100000]。 #define NC()(P1、P2 == &&(P2 =(P1 = BUF)+関数fread(BUF、1,100000、STDIN)、P1 == P2)EOF:* P1 ++) int型RD(){int型のx = 0 ; チャーC = NC()。一方、(C <48)C = NC()。一方、(C> 47)x =(((X << 2)+ X)<< 1)+(C ^ 48)、C = NC()。戻りX;} int型のCNT、エッジ。 BOOL VIS [MAXN]。 int型のミュー[MAXN]、プライム[MAXN]、HD [MAXN]に[MAXN * 20]、NEX [MAXN * 20]。 LL sumv [MAXN]。 用(J = I; J <= M; J + = I)(; I <= M ++ I I = 1)のためのNEX [++エッジ] = HD [J]、HD [J] =エッジに[エッジ] = I。 以下のための(I = 2; I <= M; ++ I) { IF(VIS [I]!)MU [I] = - 1、プライム[++ CNT] = I。 用(J = 1; J <= iが素数[j]を* CNT &&の1LL <= M; ++ J) { VIS [iが素数* [J] = 1。 IF(I%プライム[j] == 0) { MU = 0 [Iがj] [素数を*]。 ブレーク; } MU [iが素数* [J] = -ミュー[I]。 } } のための(i = 1; I <= M; ++ i)に対する(J = HD [i]は、J、J = NEX [J])sumv [I] + = [J]に】MU *に[J]。 } O2 INTメイン() { // setIO( "入力")。 Linear_shaker(); INT T = RD()。 一方、(T--) { int型nは、I。 N = RD()。 LL再= 0。 用(i = HD [N]; I; I = NEX [I])を再+ = sumv [する[I]] *合計(N /への[I])。 再* = N; printf( "%LLDする\ n"、RE)。 } 0を返します。 }