私は算術ライブラリの使用に比較的慣れていません。MPIR
ライブラリ内の関数の 1 つを使用して、最大公約数を計算するコードを作成する必要があります。いくつかのメソッドを見つけましたが、それらが変数を定義する方法がわかりません。例: 以下に関して:
void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2)
変数の型とその使い方がわかりません。これを明確にする簡単なコードを誰かに教えてもらえますか?
私は算術ライブラリの使用に比較的慣れていません。MPIR
ライブラリ内の関数の 1 つを使用して、最大公約数を計算するコードを作成する必要があります。いくつかのメソッドを見つけましたが、それらが変数を定義する方法がわかりません。例: 以下に関して:
void mpz_gcd (mpz_t rop, mpz_t op1, mpz_t op2)
変数の型とその使い方がわかりません。これを明確にする簡単なコードを誰かに教えてもらえますか?
しかし、変数の型を理解できません。
関心のある変数の型mpz
である場合、その型は (実数ではなく) 単純に任意精度の整数です。
変数自体に関してrop
は、 は戻り変数であり、 と の GCD に設定されop1
ますop2
。
たとえば、この関数の使用法を示す完全なプログラムを次に示します。
#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;
}