CF Edu 15 B 求和二的冪次

2021-07-15 21:33:01 字數 926 閱讀 9552

you are given n integers a1, a2, …, an. find the number of pairs of indexes i, j (i < j) that ai + aj is a power of 2 (i. e. some integer x exists so that ai + aj = 2x).

the first line contains the single positive integer n (1 ≤ n ≤ 105) — the number of integers.

the second line contains n positive integers a1, a2, …, an (1 ≤ ai ≤ 109).

print the number of pairs of indexes i, j (i < j) that ai + aj is a power of 2.

4 7 3 2 1

給你一堆數,問在這堆數中兩兩組合,使他們的和是二的冪次的最多的組合數

開始我就想直接每個數依次和其他數求和然後用(x&x-1)判斷是否是二的冪次,發現t了…果斷就不知道怎麼優化了qaq…看了題解,發現求組合的時候沒有乙個乙個挨個去求,2^32是大於1e9的,n^2的複雜度,內層用2的冪次單獨判斷,用map處理每個數出現的次數。最後+1,那開始時候的判斷就只會判斷已經加入map中的數,而不會出現乙個數與其他所有數比較的情況。

還有就是左移右移又記反了,x<

#include

using

namespace

std;

//long long a[100005];

bool fun(long

long v)

maplong ,long

long>s;

int main()

二分求冪,快速求解a的b次冪

如何求得a的b次冪呢,那還不簡單,乙個for迴圈就可以實現!void main void cout 那麼如何快速的求得a的b次冪呢?上面的 還可以優化嗎?當然是ok的!下面就介紹一種方法 二分求冪。所謂二分求冪,即是將b次冪用二進位制表示,當二進位制位k位為1時,需要累乘a的2 k次方。下面優化一下...

a的b次冪的約數和

自 這個不能直接求逆元來做,求現在來看乙個逆元最常見問題,求如下表示式的值 當然這個經典的問題有很多方法,最常見的就是擴充套件歐幾里得,如果 是素數,還可以用費馬小定理。但是你會發現費馬小定理和擴充套件歐幾里得演算法求逆元是有侷限性的,它們都會要求a 與m互素。實際上我們還有一 種通用的求逆元方法,...

D a的b次 快速求冪

time limit 1000 ms memory limit 32768 kb os windows source acm程式設計期末考試 2006 06 07 給你兩個數a和b,計算a的b次方,輸出a的b次方的最後三位數所表示的整數。input 輸入資料報含多個測試例項,每個例項佔一行,由兩個正...