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有關。
[LeetCode清單]https://www.youtube.com/watch?v=bn2ZySAsbHA&list=PLYRlUBnWnd5IdDHk2BjqXwesydU17z_xk&index=1
[RSA簡介與python加密解密示範]https://youtu.be/72SU1B4M44M
C版的code在下方,全部自己造車輪
- int superPow(int a, int* b, int bSize){
- const int n=1337;
- const int phi=1140;
- int exp=0;
- for(register int i=0; i<bSize; i++)
- exp=(b[i]+10*exp)%phi;
- bool e[12];
- int e2=exp;
- for(register int i=0; i<12; i++){
- e[i]=(e2%2==1);
- e2>>=1;
- }
- int y=1;
- a%=n;
- for(register int i=11; i>=0; i--){
- y=y*y%n;
- if (e[i]) y=y*a%n;
- }
- return y;
- }
沒有留言:
張貼留言