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 ...