herrDeng網內搜尋

自訂搜尋

Ads

2023年2月11日 星期六

RSA演算 Euler定理搞定LeetCode 372  Super Pow--C,C++,Python實作

 
 RSA 演算 Euler 定理搞定#LeetCode 372 Super Pow--C,C++,Python實作。玩過數論、RSA演算的,解這個問題剛好,C++解答打敗94%,還沒有特別優化。

Python做好的車輪太多,練不到什麼功,純粹就減少存取時間,用C/C++包好的系統Python函式,儘量少用純Python的慢速車輪。C語言又幾乎沒車輪全部要自己來,C++還有些車輪。

LeetCode把隱藏版的測試數字弄得很大,自製車輪一不小心就會runtime error。

後來小心觀看,C++ 最後的一個for-loop控制變數i的初值12應該跟C版的一樣都要改成11,這個疏忽卻未造成IndexError,應該是跟bitset存取一次可要抓很多bits有關。
[RSA簡介與python加密解密示範]https://youtu.be/72SU1B4M44M

C版的code在下方,全部自己造車輪
  1. int superPow(int a, int* b, int bSize){
  2. const int n=1337;
  3. const int phi=1140;
  4. int exp=0;
  5. for(register int i=0; i<bSize; i++)
  6. exp=(b[i]+10*exp)%phi;
  7. bool e[12];
  8. int e2=exp;
  9. for(register int i=0; i<12; i++){
  10. e[i]=(e2%2==1);
  11. e2>>=1;
  12. }
  13. int y=1;
  14. a%=n;
  15. for(register int i=11; i>=0; i--){
  16. y=y*y%n;
  17. if (e[i]) y=y*a%n;
  18. }
  19. return y;
  20. }

沒有留言:

Related Posts Plugin for WordPress, Blogger...

熱門文章