我在使用算术库方面相对缺乏经验。我需要尝试使用MPIR库中的一个函数来编写一些计算最大公分母的代码。我发现了几种方法,但我不理解它们定义变量的方式。例如:关于:
void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2) 我无法理解变量类型以及如何使用它们。有没有人能给我提供一些简单的代码,让我明白这一点?
发布于 2013-01-02 09:38:10
,但不能理解变量类型。
如果它是您关心的变量类型,那么mpz类型就是简单的任意精度整数(而不是reals)。
就变量本身而言,rop是返回变量,将被设置为op1和op2的GCD。
例如,下面是一个完整的程序,说明了该函数的用法:
#include <stdio.h>
#include <mpir.h>
int main (void) {
mpz_t a, b, c;
mpz_init (a); mpz_init (b); mpz_init (c);
mpz_set_str (a, "1024", 10);
mpz_set_str (b, "768", 10);
mpz_gcd (c, a, b);
printf ("GCD of "); mpz_out_str (stdout, 10, a);
printf (" and "); mpz_out_str (stdout, 10, b);
printf (" is "); mpz_out_str (stdout, 10, c);
putchar ('\n');
return 0;
}输出为:
GCD of 1024 and 768 is 256,我想生成长位的随机值。
然而,如果(正如你在评论中提到的,尽管很难看到GCD计算的适用性),你想要一个100位的随机数,你可以使用如下内容:
#include <stdio.h>
#include <time.h>
#include <mpir.h>
int main (void) {
mpz_t a;
gmp_randstate_t rstate;
mpz_init (a);
gmp_randinit_default (rstate);
gmp_randseed_ui (rstate, time (0));
mpz_urandomb (a, rstate, 100);
printf ("100 random bits gives: "); mpz_out_str (stdout, 10, a);
putchar ('\n');
return 0;
}https://stackoverflow.com/questions/14115870
复制相似问题