BZOJ 2226:[Spoj 5971] LCMSumメビウス反転+しばしば深刻なカード

オーバー-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を返します。
}

  

おすすめ

転載: www.cnblogs.com/guangheli/p/11101157.html