在C中使用GMP为变量分配一个很大的数字

问题描述

我目前正在科学编程课程中学习GMP。我需要打印23 ^ 45的表格。这是一个不寻常的大数字,因此我需要使用GMP。

我必须构造一个从1到10的循环。问题在于将23 ^ 45赋给一个变量。我在网上搜索了它,但找不到任何类似的东西。

到目前为止,我知道首先需要定义mpz_t变量。然后需要为变量分配内存。下一步是将值分配给变量。

我已经阅读了此文档: https://tspiteri.gitlab.io/gmp-mpfr-sys/gmp/Integer-Functions.html

因此,我知道我可以使用mpz_set_str(variable,“ str”,base)分配一个值

或带有mpz_set_d(变量,要分配的值)。

到目前为止,我有:

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <math.h>

int main(void)
{

   mpz_t a,b;


   // allocate memory for the variables
   mpz_init(a);
   mpz_init(b);

我想实现以下目标:

// assign values
    
mpz_set_d(a,pow(23,45));
mpz_set_str(b,"pow(23,45)",10)

从这里开始,我很困惑,无法找到示例。如果有人可以帮助我或将我引导到类似的线索,那就太好了。

Ter

更新:

我现在有这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <math.h>

int main(void)
{

   mpz_t a,b,c,d;

   mpz_init(c);

   mpz_init_set_ui(a,23);
   mpz_init_set_ui(b,45);

   mpz_pow_ui(c,a,b);

   gmp_printf("a: %Zd,b: %Zd,23^45: %Zd",c);





   return EXIT_SUCCESS;
}

但是我仍然不在那里,因为我溢出了。

问题:为什么我会溢出 问:为了避免溢出,我需要更改什么?

解决方法

根据定义(GMP 6.2.1 手册)

void mpz_pow_ui (mpz t rop,const mpz t base,unsigned long int exp)

所以,尝试替换:

mpz_t a,b,c,d;
mpz_init_set_ui(b,45);

用于:

mpz_t a,d;
unsigned long int b = 45;

您可能需要相应地更改您的 gmp_printf 语句。

希望有帮助

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...