我如何使用MPIR库计算GCD

How can I calculate the GCD using MPIR library

本文关键字:计算 GCD MPIR 何使用      更新时间:2023-10-16

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

void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2) 

我不能理解变量的类型和如何使用它们。谁能给我提供一些简单的代码,澄清这一点给我?

但是不能理解变量的类型。

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

就变量本身而言,rop是返回变量,它将被设置为op1op2的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;
}