Kaosar və OR cütlərinin sayı#12436

Kaosar və OR cütlərinin sayı (Həll təhlili)

Problem Author:

Al_Kaosar

Prepared by:

MathModel

Edited by:

MathModel

Həll

x \ | \ y = n bitlər üzrə OR şərtinin ödənməsi üçün hər bit mövqeyini ayrıca nəzərdən keçirməliyik. n_i, x_i, və y_i uyğun olaraq və -nin -ci bitləri olsun.

  • Əgər n_i = 0 olarsa: Yeganə mümkün hal x_i = 0 və y_i = 0-dır. (1 seçim)

  • Əgər n_i = 1 olarsa: (x_i, y_i) cütü (0, 1), (1, 0), və ya ola bilər. (3 seçim)

Qoy ədədindəki qurulmuş bitlərin (population count) sayı olsun. Onda 0 \le x, y \le n və x \ | \ y = n şərtini ödəyən cütlərinin ümumi sayı dəqiq olaraq 3^k-dir. Diqqət edin ki, x, y \le n məhdudiyyəti təbii şəkildə ödənir, çünki və , -in altmaskalarıdır.

Məsələdə isə 1 \le x, y \le n tələb olunur. Buna görə də x=0 və ya y=0 olan halları çıxmalıyıq:

  1. Əgər x=0 olarsa, onda 0 \ | \ y = n \implies y = n. Bu, cütünü verir.

  2. Əgər y=0 olarsa, onda x \ | \ 0 = n \implies x = n. Bu, cütünü verir.

Bütün набор входных данных-larda n \ge 1 olduğuna görə bu iki cüt fərqlidir. Deməli, ümumi saydan 2 çıxırıq. Son cavab (3^k - 2) \pmod{10^9+7} olur.

Hər bir набор входных данных üçün mürəkkəblik modullu qüvvətə yüksəltməyə görə O(\log n)-dir.

for _ in range(int(input())):
    n=int(input())
    k=n.bit_count()
    mod=10**9+7
    print((pow(3,k,mod)-2)%mod)