効果:M $は$ \合計\ limits_ {K = 1} ^ N \ {テキスト(KM)&M} $を求めて、$ Nを考えます
貢献$ Iはビット、明らかに$ \ lfloorの\のFRAC {KM} {2 ^ I}を考慮$ \ rfloor $奇数の数は$ 2 ^ i個の$乗算されます
それは$ 2 ^ Iに等しい(\和\ lfloor \ FRAC {KM} {^ I 2} \ rfloor-2 \和\ lfloor \ FRAC {KM} {2 ^ {I + 1}} \ rfloor)$を使用することができますヨーロッパは、決定されたクラスです
書式#include <iostreamの> の#include <sstream提供> する#include <アルゴリズム> 書式#include <cstdioを> する#include <cmath> の#include <設定> 書式#include <マップ> 書式#include <キュー> の#include <文字列> の#include <CStringの> #include <ビットセット> の#include <機能> の#include <ランダム> の#define REP(I、N)のために(INT iは=、iが<= N; ++ I) の#define PER(I、N )(I = N int型のために、私は> = A; - I) の#defineのHRのputchar(10) の#define PB一back の#define LC(O << 1) の#define RC(LC | 1) の#define中旬(( L + R)>> 1) の#define LSのLC、L、中 の#define RSのRC、ミッド+ 1、R の#define X最初 の#define Y秒 の#define IOのstd :: IOS :: sync_with_stdio(偽) の#define ENDL '\ N' の#define DB(A)({REP(__ I、1、n)はCOUT << [__ I] <<」「;時間。 }) 名前空間stdを使用。 typedefの長い長いLL。 typedefのペア<int型、int型> PII。 CONST int型P = 1E9 + 7、INV2 =(P + 1)/ 2。 LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} のLL qpow(-1,11,11- n)で{LLのR = 1%P;(%= Pのために、N ; = *%P、N >> = 1)であれば(N - 1)R = R *%のP、リターンR;} ?LL INV(LL X){X <= 1を返す:INV(P%以下X)*(PP / X)%P;} インラインint型RD(){int型のx = 0; CHAR P = GETCHAR();一方、(P < '0' || P> '9')p = GETCHAR() ;一方、(P> = '0' && P <= '9')、X = X * 10 + P-'0' 、P = GETCHAR();戻りX;} //ヘッド のint N、M。 INT {(LLのB、LLのC -1,11,11- n)を解く (場合! IF(A> = C || B> = C){ INT、T =(%のC、Bの%のC、C、N)を解きます。N%= P。 リターンさ(t +(A / C)%のP×n個%のP×(N + 1)%のP * INV2 +(B / C)%のP×(N + 1))%のP。 } LL M =((__int128)* N + B)/ C。 リターン((N%P)*(M%P)-solve(C、CB-1、M-1))%のP。 } int型のmain(){ LL N、M。 CIN >> N >> M。 int型ANS = 0; REP(I、0,60)IF(M >> I&1){ int型A =(M、0,1ll << I、n)を解きます。 int型B =解く(M、0,1ll << I + 1、N)。 INT C =(1LL << I)%のP。 ANS =(ANS +(A-2LL * B)* C)%のP。 } IF(ANS <0)ANS + = P。 printf( "%d個の\ n"、ANS)。 }