【发布时间】:2020-04-26 14:11:25
【问题描述】:
我试图有一个递归函数,最终将返回一个 mpz_t 数据类型。我曾尝试使用mpz_get_ui() 来实现这一点,但这无法以非常大的数字(15 位数字+)给出正确的结果。该程序的目的是密码学。
我也尝试过创建 void 类型的函数并添加一个 mpz_t 参数作为答案占位符,如下所示:void fme(mpz_t y, mpz_t g, mpz_t x, mpz_t p) 但这消除了递归调用该函数的可能性,因为它不再返回任何内容。
我想知道是否可以使用 mpz_t 指针数据类型 mpz_t* 做任何事情?
这是我目前所拥有的:
unsigned long int fme(mpz_t g, mpz_t x, mpz_t p) {
mpz_t result, temp;
mpz_init(result);
mpz_init(temp);
if (mpz_cmp_d(x, 0) == 0) {
mpz_clear(result);
mpz_clear(temp);
return 1;
} else if (mpz_even_p(x) != 0) {
mpz_fdiv_q_ui(temp, x, 2);
mpz_set_ui(result, fme(g, temp, p));
mpz_mul(result, result, result);
mpz_mod(result, result, p);
unsigned long int answer = mpz_get_ui(result);
mpz_clear(result);
mpz_clear(temp);
return answer;
}
【问题讨论】:
-
为什么不直接返回
mpz_t?? -
它是array_type。 C 不允许这样做。
-
当然可以。
but this eliminates the possibility of recursive是假的。 -
我想过简单地单独调用它,但 fme() 最终返回的结果是我需要在括号中使用的结果。不是它的变量之一。如果有任何关于如何做到这一点的建议将是完美的!我想让它尽可能靠近这个结构。
-
请注意,如果
if的两个条件都为假,则函数返回的内容不清楚。
标签: c return-type gmp