【发布时间】:2010-04-25 19:36:39
【问题描述】:
我正在尝试对任意大整数实施 Solovoy-Strassen 素数测试。我还将编写一个 bignum(不能使用 3rd 方实现,因为这是一个学术项目)。我已经决定了 bignum 的以下结构:
struct {
uint64_t *tab;
int size; // number of limbs
int sign;
}
我将使用 base-32 作为我的数字(因此 uint64_t,对于部分产品,至少我假设它们将是部分产品)。这个决定是基于previous question asked.
我处于静止状态。我无法想象如何将一个字符串表示为任意大小的小数并将其转换为上面的 bignum 结构。
有人可以告诉我。即使是更小的例子也很好,比如将任意字符串转换为八进制数字,然后存储在 uint16_t 数组中。
谢谢。
【问题讨论】:
-
您是否尝试从
gmp库中读取mpz/set_str.c:mpz_set_str()和mpn/generic/set_str.c:mpn_set_str()? -
另外,您误解了上一个答案中的信息,因此您的结构看起来很有趣。由于四肢使用的是 64 位类型,因此您的基数是 264,而不是 32 == 25。
-
一个“学术项目”怎么不能使用GMP?你真的不想像他们已经拥有的那样高效和优化算法来实现代码。如果这是一个“家庭作业项目”,那么,当然,你被卡住了,如果它是一个“商业项目”,也许许可证不合适。但是对于学术用途,在 C 语言中,GMP 将为您节省大量工作。
-
@Rex - 我所说的学术是指家庭作业,但仍然属于项目性质。 @GregS - 谢谢,我刚刚向我的教授澄清,我们被允许使用固定大小的数组,所以我想我将使用 32 位或 64 位和固定大小来存储 1000 个十进制数字。 @J.F.塞巴斯蒂安:谢谢,我一直在看。由于 gmp 的深奥性,这有点难以理解,但它确实提供了一个很好的起点。
标签: c algorithm math types bignum