文档声明其界面为:
unsigned long int mpz_mod_ui (mpz_t r, const mpz_t n, unsigned long int d);
本质上是计算
r = n % d
,它是一个小于d
的非负整数,也是函数结果;或者如果 d == 0
. 则除以零
是否可以将
r
参数设置为 NULL
,这意味着我们不需要将 mpz_t
设置为结果?
在C中,
unsigned long int
不是固定大小。它至少是 32 位,但通常是 64 位。不同尺寸unsigned long int
的平台是否支持 GMP?在所有支持的平台上,最大的有效 d
始终是 ~0UL
(或者我认为等效于 C 编译器的 ULONG_MAX
中定义的 <limits.h>
)吗?
使用
时,是否可以将mpz_mod_ui
参数设置为NULL,这意味着我们不需要将mpz_t设置为结果?r
这是不可取的,还有更好的方法。正如 comment 中所指出的,有一个函数计算
n % d
的 d
适合 unsigned long int
:
unsigned long int mpz_fdiv_ui (const mpz_t n, unsigned long int d);
各种大小
的平台是否支持 GMP?unsigned long int
是的。如另一条评论中所述,
unsigned long
可以是 64 位或 32 位,具体取决于 GMP 编译参数,请参阅ABI 和 ISA 文档。然而,64 位 unsigned long int
的支持越来越多,并且在每个受支持的平台上至少有一个选项可用。