C++ 如何使用MPIR库计算GCD

C++ 如何使用MPIR库计算GCD,c++,visual-c++,gmp,C++,Visual C++,Gmp,我在使用算术库方面相对缺乏经验。我需要使用MPIR库中的函数之一,尝试编写一些计算最大公分母的代码。我发现了几种方法,但我不理解它们定义变量的方式。例如:关于: void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2) 我无法理解变量类型以及如何使用它们。有人能给我提供一些简单的代码来澄清这一点吗 但不能理解变量的类型 如果您关心的是变量类型,mpzone就是任意精度的整数(与实数相反) 就变量本身而言,rop是返回变量,该变量将被设置为op1和op2的G

我在使用算术库方面相对缺乏经验。我需要使用
MPIR
库中的函数之一,尝试编写一些计算最大公分母的代码。我发现了几种方法,但我不理解它们定义变量的方式。例如:关于:

void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2) 
我无法理解变量类型以及如何使用它们。有人能给我提供一些简单的代码来澄清这一点吗

但不能理解变量的类型

如果您关心的是变量类型,
mpz
one就是任意精度的整数(与实数相反)

就变量本身而言,
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计算的适用性)您想要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;
}
#包括
#包括
#包括
内部主(空){
mpz_t a;
gmp\u randstate\u t rstate;
mpz_init(a);
gmp\u随机初始化\u默认值(rstate);
gmp_randseed_ui(rstate,time(0));
乌拉多姆普(a,R州,100);
printf(“100个随机位给出:”);mpz_out_str(标准输出,10,a);
putchar('\n');
返回0;
}

你看了吗?如果任意数字没有那么大,你可以使用递归的
gcd
函数,它非常快。没有。我想生成长位的随机值。我看了教程,但我真的需要一个适用于两个小数的示例代码。
#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;
}