我有一個關於GNU MP的問題,請問如何解決這個問題。 我在Windows上使用「The GNU Multiple Precision Arithmetic Library」版本5.1.1。 (MinGW \ gcc + MSYS)GNU MP Library的GCD計算問題
存在一個mpz_gcd函數來計算兩個整數的「gcd」。
void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2);
就我從文檔中得到的,在GNU MP中實現了幾個算法用於計算最大公約數。其中:
- 二進制GCD
- 萊默算法
- 次二次GCD
所使用的算法似乎是自動選擇,基於整數的輸入大小。
目前,二進制算法用於GCD只有當N < 3.
對於除GCD_DC_THRESHOLD較大輸入,GCD經由的hGCD(半GCD)函數 作爲一般化到萊默的算法來計算。
所以,我猜有至少三種不同的方法來獲得gcd(a,b)。 我的主要問題是:我想指定自己使用哪種算法。 我會比較這些算法在隨機大輸入(即10^5位)上的執行時間,以找出一些常見趨勢:使用「Binary GCD」變得比「Lehmer的方法」更糟糕的是「HGCD-萊默爾泛化「比直接勒梅爾等更好。
是否有任何簡單的方法來指定要使用的算法?以任何方式從庫中提取該算法,以任何方式修改一些「#define」變量。沒有庫重新編譯,是否可以像我想要的那樣做一些事情?我只是初學者,我不覺得能夠找出圖書館裏的所有東西。
P.S.可能有人會感興趣會發生什麼。 我在github上有一些代碼:https://github.com/int000h/gcd_gcc
我試着去調查。我只是立即感到困惑,爲什麼這個定義放在「mpn /」下,而不是「mpz /」和其他許多東西。至少現在我知道這是可能的,所以我會繼續尋找。謝謝! – 2013-02-20 01:11:21