FWTテンプレートのタイトル。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#defineは長い長いLL 4 の#define MOD十億七 5 の#define(; iが=(y)を<++ iはi =(X)INT)のための担当者(I、x、y)は 6 の#define DREP(I、X 、y)のための式(I =(X INT); I> =(Y); - I) 7インラインint型リード(){ 8 チャー CH = GETCHAR()。INT X = 0、F = 1 。 9 一方(CH < ' 0 ' || CH> ' 9 ' ){ 10 もし(CH == ' - ')、F = - 1 。 11 CH = GETCHAR()。 12 } 13 ながら(' 0 ' <= CH && CH <= ' 9 ' ){ 14 、X = X * 10 + CH- ' 0 ' 。 15 CH = GETCHAR()。 16 } 17 リターンのx *のF。 18 } 19インラインINT電源(int型のx、int型のY){ 20 int型 RET = 1 ; 21 一方、(Y){ 22 であれば(Y&1)RET = 1LL * RET * X%MOD。 23 X = 1LL * X * X%MOD。Y >> = 1 。 24 } 25 リターンRET。 26 } 27インラインボイド FWT_xor(INT *、int型 N、int型のOP)を{ 28 INT INV2 =(MOD + 1)/ 2 。 29 のために(INT D = 1; D <N。D << = 1 ){ 30 のための(int型 i = 0 ; iがNを<; I + =(D << 1 )){ 31 のための(int型 J = 0 ; J <D; ++ j)は{ 32 INT X = [I jの+]、Yは[IがJ + + D]を。 33 [I jの+] =(X + Y)%MOD。 34 [IがJ + Dを+] =(X + MOD - Y)%MOD。 35 場合(OP == - 1 ){ 36 [iがjは+] = 1LL *%INV2 * [iがjで+] MOD。 37 * * [iがJ + Dを+] INV2%= 1LL [iがJ + Dを+] MODします。 38 } 39 } 40 } 41 } 42 } 43 INT [ 200010 ]。 44 INT PRI [ 200010 ]、TOT。 45 BOOL VIS [ 200010 ]。 46インラインボイドのinit(){ 47 のための(int型 I = 2 ; I <= 50000 ; ++ i)が{ 48 であれば(!VIS [I]){ 49 PRI [++ TOT] = I; 50 のための(int型 ; J <= jが=私を+ 50000 ; J + = I){ 51 VIS [J] = 1 。 52 } 53 } 54 } 55 } 56 INT メイン(){ 57 のint N、M。 58 のinit(); 59 一方(scanf関数(" %D%dの"、&N、&M)=!EOF){ 60 INT N。 61 のための(N = 1; N <= M。N << = 1 )。 62 のために(int型 I = 0 ; iがNを<; ++ i)は[I] = 0 。 63 のために(int型 I = 1 ; I <= TOT; ++ I){ 64 であれば(PRI [i]が> M)ブレーク。 65 [PRI [I] = 1 。 66 } 67 FWT_xor(N、1 )。 68 のために(int型 I = 0 ; iがNを<; ++ i)が{ 69 [I] = 電力([I]、N)。 70 } 71 FWT_xor(N - 1 )。 72 のprintf(" %d個の\ n "、[ 0 ])。 73 } 74 }