刚才的算法显示const__mpz_struct*类型的实参与char*类型的形参不兼容
时间: 2023-08-20 18:07:34 浏览: 122
这是因为在函数中使用了错误的参数类型。函数中使用了mpz_get_str函数将mpz_t类型的exponent转换为了char*类型的exp,但是函数签名中并没有定义exp参数的类型。
为了解决这个问题,应该将exp参数的类型定义为char*,并将其作为mpz_get_str函数的第三个参数传递。修改后的函数定义如下所示:
```
void mod_exp(mpz_t result, const mpz_t exponent, const mpz_t base, const mpz_t n) {
char exp[2048 + 10];
mpz_get_str(exp, 2, exponent); //把指数e转化为二进制并储存到字符数组exp中
mpz_t x, power;
mpz_init(power);
mpz_init_set_ui(x, 1); // x = 1
mpz_mod(power, base, n); //power = base mod n
for (int i = strlen(exp) - 1; i >= 0; i--)
{
if (exp[i] == '1')
{
mpz_mul(x, x, power);
mpz_mod(x, x, n); //x = x * power mod n
}
mpz_mul(power, power, power);
mpz_mod(power, power, n); //power = power^2 mod n
}
mpz_set(result, x); //返回结果
}
```
这样就可以正确编译和运行该函数了。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)