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:
Əgər x=0 olarsa, onda 0 \ | \ y = n \implies y = n. Bu, cütünü verir.
Ə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)