2011-10-08 64 views
2

GMP允許將mpz_t打印到基數62,但我想將一個數字表示爲任意基數N,因此我首先需要生成一個整數數組(讓我們說我將自己侷限在基地2^64),所以unsigned long數組可能做到這一點。將GMP整數轉換爲基數N整數

例如,如果我想採取任何整數並將其轉換爲基地792,我不能把它變成一個字符串直接,我必須做出一個整數數組第一。

是否有GMP這種現有的代碼,像是某種我需要了解或一些數學我應該開始編碼呢?

P.S. 我知道使用'base'這個術語是完全不相關的,但我可以使用'線性向量空間',所以它使得轉換沒有意義,但unicode中有很多符號(unicode 3.2中的95,221),所以我仍然可以找到一種用單一符號來表示那些人的方法。

回答

2

內部,GMP的功能直接或間接調用mpn層 - 這是記錄在這裏:

http://gmplib.org/manual/Low_002dlevel-Functions.html#Low_002dlevel-Functions

mpn_get_str只支持基地達256所以我不認爲你可以飛得更高,除非你寫你自己的基礎轉換(根本不是微不足道的)。

+0

什麼,所以你通過不平凡的意思嗎?我不知道我是否可以直接從一個基地轉換到另一個基地,而不先使用「原生」號碼。 – jokoon

+0

我的意思,這是不容易寫一個基本轉換 - 更不用說一個有效率的。還沒有已知的算法在沒有經過本地(二進制)基礎的情況下有效地從一個基礎到另一個基礎。如果你真的需要比256更高的基地,有可能修改'mpn_get_str'的​​源代碼,這樣做。據我所知,它被限制在256位,因爲它輸出到一個'unsigned char'數組。在內部,該算法可能允許基於「mp_limb_t」的大小。 – Mysticial