演算法研究之位運算

2021-06-05 03:20:42 字數 1167 閱讀 6078

1、使用位運算乘法。

把乙個乘數變為2進製後,使用位運算完成乘數的乘法。

/** 輸入:正整數k 和 正整數m

* 輸出:k*m

*/__int64 km(__int64 k, __int64 m)  

return x;  

}  

2、使用位運算的乘方運算

指數變為2進製後,使用位運算完成乘方運算。

偽**:

c++實現

[cpp]view plain

copy

print?

/** 輸入:正整數v mod m 和 g mod m 

* 輸出:g^v mod m 

*/__int64 gvmm(__int64 g, __int64 v, __int64 m)  

e >>= 1;  

}  

return x;  

}  

乘方的測試:

使用普通演算法和位運算演算法比較。

[cpp]view plain

copy

print?

#include 

#include 

#include 

using

namespace std;  

/** 輸入:正整數v mod m 和 g mod m 

* 輸出:g^v mod m 

*/__int64 gvmm(__int64 g, __int64 v, __int64 m)  

e >>= 1;  

}  

return x;  

}  

/** 驗證結果的普通演算法 

*/int yanzheng(__int64 g, __int64 v, __int64 m)  

return x;  

}  

int main()  

按照程式中給出的稍複雜的乘方運算,其效率分別為(多次測量後都差不多這個數量級)

21963

putong : 0.071000 seconds

21963

weiyunsuan: 0.001000 seconds

差不多普通演算法比位運算演算法慢了50-70倍。

演算法很美之位運算

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 描述乙個整型陣列裡除了兩個數字 互不相同 之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 輸入第一行 陣列的長度n 1只出現了1次的那兩個數,小的在前大的在後,空格隔...

演算法 位運算

public static intpowern int m,int n return m public static void main string args public static boolean ispower int n return false num如何使2的n次冪,那麼num nu...

演算法題型 位運算

目錄 一 題型1 不使用中間量交換兩個值 二 劍指offer47.求1 2 n 三 劍指offer48.不使用加減乘除做加法 第一種方法,數 算 若a 1,b 2 a a b 3 b a b 1 a a b 2 第二種方法,位異或運算 若a 1 01b,b 2 10b a a b 01 10 11 ...