[模運算]
對於一個數字 (> 64 bits), 其四則運算與模運算, 都需要特殊處理
為此, 我已對 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144 bits 等長度的數字, 做四則運算與模運算的類別, 對大數分解, 達到簡潔程式碼與重複利用的目的
但由於長度不斷增加, 運算量 O(k^2) 會急遽增加 (k=bits/64), 平均每增加一倍長度, 用時會多一倍
以 y= 1477!+1 (13426 bits) 為例, 計算 z = 1481^((y-1)/2) mod y 的結果 (正確結果為 -1)
先使用 65536-bit 模運算, 需時 122644 ms
而使用 262144-bit 模運算, 需時 507112 ms
比例為 1: 4.1348, 這讓長度再增加的話, 可能會變成好幾天算完
於是分析原模運算的演算法, 是使用 bitwise 的減法, 但這運算法的運算量 O((bits^2)/4), 當長度變成 4 倍, 運算量自然變為 4 倍, 時間也就變成 4 倍
所以就用分段除法來解決,