→ EdisonX:google 「大數演算法」, 高效 library : GMP 01/12 23:32
→ suhorng:(a*b)%c = ((a%c)*(b%c))%c 01/12 23:32
→ suhorng:多個數字時類推 01/12 23:32
→ suhorng:你的 Zp 平方是還在 unsigned long long int 範圍內的 01/12 23:33
推 b98901056:同suhorng大大 01/12 23:33
→ EdisonX:疑!不過你的問題未必要用大數耶,要用 mod 的全式寫出來 ? 01/12 23:33
→ suhorng:Hint在講計算 a^b % c 時, 的 O(log b) 算法, 不用 O(b) 01/12 23:33
→ EdisonX:@@ 慢了 01/12 23:33
→ suhorng:他提到的就是反覆平方法 (有人叫他 bigmod...XD) 01/12 23:34
→ EdisonX:嗯,謝謝 shuorng 補充. @原 po: google 蒙格馬利快速取模 01/12 23:36
我用(((x*x)%p)*x)%p 算出來的結果是1424112743
自己用小算盤算64777729713265913381403751 % 2147483629 = 220886070
為什麼不一樣@@? 我哪裡錯了嗎@@?
還是真的要去用array的方式寫個大數運算啊@@?
→ EdisonX: ( (x%p) * (x%p) *(x%p) ) % p; 01/13 00:12
→ EdisonX:然後你的 p 如果超過 sqrt(max_unsigned long long) 會 ov 01/13 00:13
剛剛發現原來我宣告沒弄好所以ov了-.-
感謝<(_ _)>
推 EdisonX:更正, ( ( (x%p) * (x%p) ) %p) * (x%p) ) %p 01/13 00:19
→ EdisonX:還是用 loop 去搞吧 @@ 01/13 00:20
→ EdisonX:假設 x%p = a , 如果 p > sqrt(ULL), 那 a * (a%p) 也 ov 01/13 00:21
input不會超過2^31 所已經該不會ov o.o
※ 編輯: initial1635 來自: 1.169.162.109 (01/13 00:24)