Imports System.Runtime.InteropServices _ Public Structure mpz_struct Public _mp_alloc As Integer Public _mp_size As Integer Public _mp_d As UInteger Public Overrides Function ToString() As String Return libgmpWrapper.mpz_get_str("", 10, Me) End Function Public Shared Operator +(ByVal left As mpz_struct, ByVal right As mpz_struct) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_add(res, left, right) Return res End Operator Public Shared Operator +(ByVal left As mpz_struct, ByVal right As Integer) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) If right > 0 Then libgmpWrapper.mpz_add_ui(res, left, right) Else libgmpWrapper.mpz_sub_ui(res, left, right) End If Return res End Operator Public Shared Operator -(ByVal left As mpz_struct, ByVal right As mpz_struct) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_sub(res, left, right) Return res End Operator Public Shared Operator -(ByVal left As mpz_struct, ByVal right As Integer) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) If right > 0 Then libgmpWrapper.mpz_sub_ui(res, left, right) Else libgmpWrapper.mpz_add_ui(res, left, right) End If Return res End Operator Public Shared Operator *(ByVal left As mpz_struct, ByVal right As mpz_struct) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_mul(res, left, right) Return res End Operator Public Shared Operator *(ByVal left As mpz_struct, ByVal right As Integer) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_mul_si(res, left, right) Return res End Operator Public Shared Operator \(ByVal left As mpz_struct, ByVal right As mpz_struct) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_fdiv_q(res, left, right) Return res End Operator Public Shared Operator ^(ByVal base As mpz_struct, ByVal exp As Integer) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_pow_ui(res, base, exp) Return res End Operator Public Shared Operator ^(ByVal base As mpz_struct, ByVal exp As UInteger) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_pow_ui(res, base, exp) Return res End Operator Public Shared Operator ^(ByVal base As mpz_struct, ByVal exp As mpz_struct) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) Dim exp_ui As UInteger Try exp_ui = Val(libgmpWrapper.mpz_get_str("", 10, exp)) Catch ex As Exception Throw New OverflowException("Exponent too large") End Try libgmpWrapper.mpz_pow_ui(res, base, exp_ui) Return res End Operator Public Shared Operator =(ByVal left As mpz_struct, ByVal right As mpz_struct) As Boolean Return libgmpWrapper.mpz_cmp(left, right) = 0 End Operator Public Shared Operator <>(ByVal left As mpz_struct, ByVal right As mpz_struct) As Boolean Return libgmpWrapper.mpz_cmp(left, right) End Operator Public Shared Operator =(ByVal left As mpz_struct, ByVal right As Integer) As Boolean Dim result As Boolean Dim m_right As mpz_struct libgmpWrapper.mpz_init_set_si(m_right, right) result = (libgmpWrapper.mpz_cmp(left, m_right) = 0) libgmpWrapper.mpz_clear(m_right) ' Clean up Return result End Operator Public Shared Operator <>(ByVal left As mpz_struct, ByVal right As Integer) As Boolean Return Not (left = right) End Operator Public Shared Operator &(ByVal left As mpz_struct, ByVal str As String) As String Return left.ToString & str End Operator Public Shared Operator &(ByVal str As String, ByVal right As mpz_struct) As String Return str & right.ToString End Operator Public Shared Operator <(ByVal left As mpz_struct, ByVal right As mpz_struct) As Boolean Return (libgmpWrapper.mpz_cmp(left, right) < 0) End Operator Public Shared Operator >(ByVal left As mpz_struct, ByVal right As mpz_struct) As Boolean Return (libgmpWrapper.mpz_cmp(left, right) > 0) End Operator Public Shared Operator Mod(ByVal left As mpz_struct, ByVal right As Integer) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_mod_ui(res, left, right) Return res End Operator Public Shared Operator Mod(ByVal left As mpz_struct, ByVal right As mpz_struct) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_mod(res, left, right) Return res End Operator ' Diese Konvertierer lassen den Speicher leider nicht mehr los, da kein mpz_clear aufgerufen werden kann ' Werden diese "häufig" im Code aufgerufen, führt das zu irrsinnigen Speicherlecks... Public Shared Widening Operator CType(ByVal str As String) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_set_str(res, str, 10) Return res End Operator Public Shared Widening Operator CType(ByVal val As Int64) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_set_si(res, val) Return res End Operator Public Shared Widening Operator CType(ByVal val As ULong) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_set_ui(res, val) Return res End Operator Public Shared Widening Operator CType(ByVal val As Integer) As mpz_struct Dim res As mpz_struct libgmpWrapper.mpz_init(res) libgmpWrapper.mpz_set_si(res, val) Return res End Operator End Structure _ Public Structure mpq_struct Public _mp_num As mpz_struct Public _mp_den As mpz_struct Public Overrides Function ToString() As String Return libgmpWrapper.mpq_get_str("", 10, Me) End Function Public Shared Operator +(ByVal left As mpq_struct, ByVal right As mpq_struct) As mpq_struct Dim res As mpq_struct libgmpWrapper.mpq_init(res) libgmpWrapper.mpq_add(res, left, right) Return res End Operator Public Shared Operator *(ByVal left As mpq_struct, ByVal right As mpq_struct) As mpq_struct Dim res As mpq_struct libgmpWrapper.mpq_init(res) libgmpWrapper.mpq_mul(res, left, right) Return res End Operator Public Shared Operator &(ByVal left As mpq_struct, ByVal str As String) As String Return left.ToString & str End Operator Public Shared Operator &(ByVal str As String, ByVal right As mpq_struct) As String Return str & right.ToString End Operator Public Shared Operator &(ByVal left As mpq_struct, ByVal right As mpq_struct) As String Return left.ToString & right.ToString End Operator Public Shared Narrowing Operator CType(ByVal str As String) As mpq_struct Dim res As mpq_struct libgmpWrapper.mpq_init(res) libgmpWrapper.mpq_set_str(res, str, 10) Return res End Operator End Structure _ Public Structure mpf_struct Public _mp_prec As Integer ' Max precision, in number of `mp_limb_t's. Public _mp_size As Integer Public _mp_d As UInteger Public _mp_exp As Long ' _mp_exp_t Public Overrides Function ToString() As String Dim expptr As Integer = 0 Dim start As Integer = 0 Dim result As String = "" result = libgmpWrapper.mpf_get_str(result, expptr, 10, 0, Me) ' Fehlende Nullen auffüllen bei sehr großen Zahlen If expptr > result.Length Then result = result & StrDup(expptr - result.Length, "0") ' Ein Dezimalpunkt wird hier nicht mehr gebraucht. Return result End If ' Fehlende Nullen auffüllen bei sehr kleinen Zahlen If expptr < 0 Then If StrComp(result.Substring(0, 1), "-") = 0 Then ' Negativ result = "-" & StrDup(-expptr, "0") & result.Substring(1, result.Length - 1) Else ' Positiv result = StrDup(-expptr, "0") & result End If expptr = 0 End If ' Negative Zahlen If StrComp(result.Substring(0, 1), "-") = 0 Then ' Negativ If expptr = 0 Then ' Führende 0 result = "-0." & result.Substring(1, result.Length - 1) Else result = result.Substring(0, expptr + 1) & "." & result.Substring(expptr + 1, result.Length - expptr - 1) End If Else ' Positiv If expptr = 0 Then ' Führende 0 result = "0." & result Else result = result.Substring(0, expptr) & "." & result.Substring(expptr, result.Length - expptr) End If End If Return result End Function 'Public Shared Widening Operator CType(ByVal val As Int64) As mpf_struct ' Dim res As mpf_struct ' libgmpWrapper.mpf_init(res) ' libgmpWrapper.mpf_set_si(res, val) ' Return res 'End Operator End Structure Public Class libgmpWrapper ' Wrapper for GMP library ' Integer (mpz) Declare Function mpz_set_str Lib "libgmp-3.dll" Alias "__gmpz_set_str" (ByRef val As mpz_struct, ByVal strval As [String], ByVal baseval As Integer) As Integer Declare Function mpz_get_str Lib "libgmp-3.dll" Alias "__gmpz_get_str" (ByVal str As [String], ByVal baseval As Integer, ByRef val As mpz_struct) As String Declare Sub mpz_abs Lib "libgmp-3.dll" Alias "__gmpz_abs" (ByRef rop As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_add Lib "libgmp-3.dll" Alias "__gmpz_add" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_add_ui Lib "libgmp-3.dll" Alias "__gmpz_add_ui" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) Declare Sub mpz_addmul Lib "libgmp-3.dll" Alias "__gmpz_addmul" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_addmul_ui Lib "libgmp-3.dll" Alias "__gmpz_addmul_ui" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) Declare Sub mpz_and Lib "libgmp-3.dll" Alias "__gmpz_and" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) ' Declare Sub mpz_array_init Lib "libgmp-3.dll" Alias "__gmpz_array_init" (ByRef rop As mpz_struct, ByVal mp_size_t, ByVal mp_size_t) Declare Sub mpz_bin_ui Lib "libgmp-3.dll" Alias "__gmpz_bin_ui" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) Declare Sub mpz_bin_uiui Lib "libgmp-3.dll" Alias "__gmpz_bin_uiui" (ByRef rop As mpz_struct, ByVal ui As ULong, ByVal ui As ULong) Declare Sub mpz_cdiv_q Lib "libgmp-3.dll" Alias "__gmpz_cdiv_q" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_cdiv_q_2exp Lib "libgmp-3.dll" Alias "__gmpz_cdiv_q_2exp" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ul As ULong) Declare Sub mpz_cdiv_qr Lib "libgmp-3.dll" Alias "__gmpz_cdiv_qr" (ByRef rop As mpz_struct, ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_cdiv_r Lib "libgmp-3.dll" Alias "__gmpz_cdiv_r" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_cdiv_r_2exp Lib "libgmp-3.dll" Alias "__gmpz_cdiv_r_2exp" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ul As ULong) Declare Sub mpz_clear Lib "libgmp-3.dll" Alias "__gmpz_clear" (ByRef rop As mpz_struct) Declare Sub mpz_clrbit Lib "libgmp-3.dll" Alias "__gmpz_clrbit" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_com Lib "libgmp-3.dll" Alias "__gmpz_com" (ByRef rop As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_combit Lib "libgmp-3.dll" Alias "__gmpz_combit" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_divexact Lib "libgmp-3.dll" Alias "__gmpz_divexact" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_divexact_ui Lib "libgmp-3.dll" Alias "__gmpz_divexact_ui" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ul As ULong) Declare Sub mpz_dump Lib "libgmp-3.dll" Alias "__gmpz_dump" (ByRef src As mpz_struct) Declare Sub mpz_fac_ui Lib "libgmp-3.dll" Alias "__gmpz_fac_ui" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_fdiv_q Lib "libgmp-3.dll" Alias "__gmpz_fdiv_q" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_fdiv_q_2exp Lib "libgmp-3.dll" Alias "__gmpz_fdiv_q_2exp" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) Declare Sub mpz_fdiv_qr Lib "libgmp-3.dll" Alias "__gmpz_fdiv_qr" (ByRef rop As mpz_struct, ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_fdiv_r Lib "libgmp-3.dll" Alias "__gmpz_fdiv_r" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_fdiv_r_2exp Lib "libgmp-3.dll" Alias "__gmpz_fdiv_r_2exp" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) Declare Sub mpz_fdiv_r_ui Lib "Libgmp-3.dll" Alias "__gmpz_fdiv_r_ui" (ByRef r As mpz_struct, ByRef n As mpz_struct, ByVal d As ULong) Declare Sub mpz_fib2_ui Lib "libgmp-3.dll" Alias "__gmpz_fib2_ui" (ByRef rop As mpz_struct, ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_fib_ui Lib "libgmp-3.dll" Alias "__gmpz_fib_ui" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_gcd Lib "libgmp-3.dll" Alias "__gmpz_gcd" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_gcdext Lib "libgmp-3.dll" Alias "__gmpz_gcdext" (ByRef rop As mpz_struct, ByRef rop As mpz_struct, ByRef rop As mpz_struct, ByRef src As mpz_struct, ByRef src As mpz_struct) ' Declare Sub mpz_import Lib "libgmp-3.dll" Alias "__gmpz_import" (ByRef rop as mpz_struct, size_t, int, size_t, int, size_t, __gmp_const void *) Declare Sub mpz_init Lib "libgmp-3.dll" Alias "__gmpz_init" (ByRef rop As mpz_struct) Declare Sub mpz_init2 Lib "libgmp-3.dll" Alias "__gmpz_init2" (ByRef rop As mpz_struct, ByVal ul As ULong) Declare Sub mpz_init_set Lib "libgmp-3.dll" Alias "__gmpz_init_set" (ByRef rop As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_init_set_d Lib "libgmp-3.dll" Alias "__gmpz_init_set_d" (ByRef rop As mpz_struct, ByVal d As Double) Declare Sub mpz_init_set_si Lib "libgmp-3.dll" Alias "__gmpz_init_set_si" (ByRef rop As mpz_struct, ByVal si As Long) Declare Sub mpz_init_set_ui Lib "libgmp-3.dll" Alias "__gmpz_init_set_ui" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_ior Lib "libgmp-3.dll" Alias "__gmpz_ior" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) Declare Sub mpz_lcm Lib "libgmp-3.dll" Alias "__gmpz_lcm" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) Declare Sub mpz_lcm_ui Lib "libgmp-3.dll" Alias "__gmpz_lcm_ui" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ul As ULong) Declare Sub mpz_lucnum2_ui Lib "libgmp-3.dll" Alias "__gmpz_lucnum2_ui" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByVal ui As ULong) Declare Sub mpz_lucnum_ui Lib "libgmp-3.dll" Alias "__gmpz_lucnum_ui" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_mod Lib "libgmp-3.dll" Alias "__gmpz_mod" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) Declare Sub mpz_mul Lib "libgmp-3.dll" Alias "__gmpz_mul" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) Declare Sub mpz_mul_2exp Lib "libgmp-3.dll" Alias "__gmpz_mul_2exp" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) Declare Sub mpz_mul_si Lib "libgmp-3.dll" Alias "__gmpz_mul_si" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal li As Long) Declare Sub mpz_mul_ui Lib "libgmp-3.dll" Alias "__gmpz_mul_ui" (ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) Declare Sub mpz_neg Lib "libgmp-3.dll" Alias "__gmpz_neg" (ByRef rop As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_nextprime Lib "libgmp-3.dll" Alias "__gmpz_nextprime" (ByRef rop As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_pow_ui Lib "libgmp-3.dll" Alias "__gmpz_pow_ui" (ByRef rop As mpz_struct, ByRef base As mpz_struct, ByVal exp As ULong) Declare Sub mpz_powm Lib "libgmp-3.dll" Alias "__gmpz_powm" (ByRef rop As mpz_struct, ByRef base As mpz_struct, ByRef exp As mpz_struct, ByRef modulo As mpz_struct) Declare Sub mpz_powm_ui Lib "libgmp-3.dll" Alias "__gmpz_powm_ui" (ByRef rop As mpz_struct, ByRef base As mpz_struct, ByVal exp As ULong, ByRef modulo As mpz_struct) 'Declare Sub mpz_random Lib "libgmp-3.dll" Alias "__gmpz_random" (ByRef rop As mpz_struct, ByVal mp_size_t) 'Declare Sub mpz_random2 Lib "libgmp-3.dll" Alias "__gmpz_random2" (ByRef rop As mpz_struct, ByVal mp_size_t) Declare Sub mpz_realloc2 Lib "libgmp-3.dll" Alias "__gmpz_realloc2" (ByRef rop As mpz_struct, ByVal ul As ULong) Declare Sub mpz_rootrem Lib "libgmp-3.dll" Alias "__gmpz_rootrem" (ByRef rop As mpz_struct, ByRef rop As mpz_struct, ByRef src As mpz_struct, ByVal ui As ULong) 'Declare Sub mpz_rrandomb Lib "libgmp-3.dll" Alias "__gmpz_rrandomb" (ByRef rop As mpz_struct, ByVal gmp_randstate_t, ByVal ui As ULong) Declare Sub mpz_set Lib "libgmp-3.dll" Alias "__gmpz_set" (ByRef rop As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_set_d Lib "libgmp-3.dll" Alias "__gmpz_set_d" (ByRef rop As mpz_struct, ByVal d As Double) Declare Sub mpz_set_f Lib "libgmp-3.dll" Alias "__gmpz_set_f" (ByRef rop As mpz_struct, ByRef src As mpf_struct) Declare Sub mpz_set_q Lib "libgmp-3.dll" Alias "__gmpz_set_q" (ByRef rop As mpz_struct, ByRef src As mpq_struct) Declare Sub mpz_set_si Lib "libgmp-3.dll" Alias "__gmpz_set_si" (ByRef rop As mpz_struct, ByVal si As Long) Declare Sub mpz_set_ui Lib "libgmp-3.dll" Alias "__gmpz_set_ui" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_setbit Lib "libgmp-3.dll" Alias "__gmpz_setbit" (ByRef rop As mpz_struct, ByVal ui As ULong) Declare Sub mpz_sqrt Lib "libgmp-3.dll" Alias "__gmpz_sqrt" (ByRef rop As mpz_struct, ByRef op As mpz_struct) Declare Sub mpz_sqrtrem Lib "libgmp-3.dll" Alias "__gmpz_sqrtrem" (ByRef rop1 As mpz_struct, ByRef rop2 As mpz_struct, ByRef op As mpz_struct) Declare Sub mpz_sub Lib "libgmp-3.dll" Alias "__gmpz_sub" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) Declare Sub mpz_sub_ui Lib "libgmp-3.dll" Alias "__gmpz_sub_ui" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByVal op2 As ULong) Declare Sub mpz_submul Lib "libgmp-3.dll" Alias "__gmpz_submul" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) Declare Sub mpz_submul_ui Lib "libgmp-3.dll" Alias "__gmpz_submul_ui" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByVal op2 As ULong) Declare Sub mpz_swap Lib "libgmp-3.dll" Alias "__gmpz_swap" (ByRef rop As mpz_struct, ByRef src As mpz_struct) Declare Sub mpz_tdiv_q Lib "libgmp-3.dll" Alias "__gmpz_tdiv_q" (ByRef q As mpz_struct, ByRef n As mpz_struct, ByRef d As mpz_struct) Declare Sub mpz_tdiv_q_2exp Lib "libgmp-3.dll" Alias "__gmpz_tdiv_q_2exp" (ByRef q As mpz_struct, ByRef n As mpz_struct, ByVal b As ULong) Declare Sub mpz_tdiv_qr Lib "libgmp-3.dll" Alias "__gmpz_tdiv_qr" (ByRef q As mpz_struct, ByRef r As mpz_struct, ByRef n As mpz_struct, ByRef d As mpz_struct) Declare Sub mpz_tdiv_r Lib "libgmp-3.dll" Alias "__gmpz_tdiv_r" (ByRef r As mpz_struct, ByRef n As mpz_struct, ByRef d As mpz_struct) Declare Sub mpz_tdiv_r_2exp Lib "libgmp-3.dll" Alias "__gmpz_tdiv_r_2exp" (ByRef q As mpz_struct, ByRef n As mpz_struct, ByVal b As ULong) Declare Sub mpz_ui_pow_ui Lib "libgmp-3.dll" Alias "__gmpz_ui_pow_ui" (ByRef rop As mpz_struct, ByVal ui As ULong, ByVal ui As ULong) Declare Sub mpz_ui_sub Lib "libgmp-3.dll" Alias "__gmpz_ui_sub" (ByRef rop As mpz_struct, ByVal ui As ULong, ByRef src As mpz_struct) 'Declare Sub mpz_urandomb Lib "libgmp-3.dll" Alias "__gmpz_urandomb" (ByRef rop As mpz_struct, ByVal gmp_randstate_t, ByVal ui As ULong) 'Declare Sub mpz_urandomm Lib "libgmp-3.dll" Alias "__gmpz_urandomm" (ByRef rop As mpz_struct, ByVal gmp_randstate_t, ByRef src As mpz_struct) Declare Sub mpz_xor Lib "libgmp-3.dll" Alias "__gmpz_xor" (ByRef rop As mpz_struct, ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) ' Declare Function mpz_get_str Lib "libgmp-3.dll" Alias "__gmpz_get_str" (ByVal str As [String], ByVal baseval As Integer, ByRef val As mpz_struct) As [String] Declare Function mpz_cmp Lib "libgmp-3.dll" Alias "__gmpz_cmp" (ByRef op1 As mpz_struct, ByRef op2 As mpz_struct) As Integer Declare Sub mpz_mod_ui Lib "libgmp-3.dll" Alias "__gmpz_fdiv_r_ui" (ByRef r As mpz_struct, ByRef n As mpz_struct, ByVal d As ULong) Declare Function mpz_perfect_square_p Lib "libgmp-3.dll" Alias "__gmpz_perfect_square_p" (ByRef op As mpz_struct) As Integer Declare Function mpz_probab_prime_p Lib "libgmp-3.dll" Alias "__gmpz_probab_prime_p" (ByRef n As mpz_struct, ByVal reps As Integer) As Integer ' Rational numbers (mpq) Declare Function mpq_set_str Lib "libgmp-3.dll" Alias "__gmpq_set_str" (ByRef val As mpq_struct, ByVal strval As [String], ByVal baseval As Integer) As Integer Declare Function mpq_get_str Lib "libgmp-3.dll" Alias "__gmpq_get_str" (ByVal str As [String], ByVal baseval As Integer, ByRef val As mpq_struct) As [String] Declare Sub mpq_abs Lib "libgmp-3.dll" Alias "__gmpq_abs" (ByRef rop As mpq_struct, ByRef src As mpq_struct) Declare Sub mpq_add Lib "libgmp-3.dll" Alias "__gmpq_add" (ByRef rop As mpq_struct, ByRef op1 As mpq_struct, ByRef op2 As mpq_struct) Declare Sub mpq_canonicalize Lib "libgmp-3.dll" Alias "__gmpq_canonicalize" (ByRef rop As mpq_struct) Declare Sub mpq_clear Lib "libgmp-3.dll" Alias "__gmpq_clear" (ByRef rop As mpq_struct) Declare Sub mpq_div Lib "libgmp-3.dll" Alias "__gmpq_div" (ByRef rop As mpq_struct, ByRef op1 As mpq_struct, ByRef op2 As mpq_struct) Declare Sub mpq_div_2exp Lib "libgmp-3.dll" Alias "__gmpq_div_2exp" (ByRef rop As mpq_struct, ByRef src As mpq_struct, ByVal ui As ULong) Declare Sub mpq_get_den Lib "libgmp-3.dll" Alias "__gmpq_get_den" (ByRef rop As mpz_struct, ByRef src As mpq_struct) Declare Sub mpq_get_num Lib "libgmp-3.dll" Alias "__gmpq_get_num" (ByRef rop As mpz_struct, ByRef src As mpq_struct) Declare Sub mpq_init Lib "libgmp-3.dll" Alias "__gmpq_init" (ByRef rop As mpq_struct) Declare Sub mpq_inv Lib "libgmp-3.dll" Alias "__gmpq_inv" (ByRef rop As mpq_struct, ByRef src As mpq_struct) Declare Sub mpq_mul Lib "libgmp-3.dll" Alias "__gmpq_mul" (ByRef prod As mpq_struct, ByRef op1 As mpq_struct, ByRef op2 As mpq_struct) Declare Sub mpq_mul_2exp Lib "libgmp-3.dll" Alias "__gmpq_mul_2exp" (ByRef rop As mpq_struct, ByRef src As mpq_struct, ByVal ui As ULong) Declare Sub mpq_neg Lib "libgmp-3.dll" Alias "__gmpq_neg" (ByRef rop As mpq_struct, ByRef src As mpq_struct) Declare Sub mpq_set Lib "libgmp-3.dll" Alias "__gmpq_set" (ByRef rop As mpq_struct, ByRef src As mpq_struct) Declare Sub mpq_set_d Lib "libgmp-3.dll" Alias "__gmpq_set_d" (ByRef rop As mpq_struct, ByVal d As Double) Declare Sub mpq_set_den Lib "libgmp-3.dll" Alias "__gmpq_set_den" (ByRef rop As mpq_struct, ByRef op As mpz_struct) Declare Sub mpq_set_f Lib "libgmp-3.dll" Alias "__gmpq_set_f" (ByRef rop As mpq_struct, ByRef op As mpf_struct) Declare Sub mpq_set_num Lib "libgmp-3.dll" Alias "__gmpq_set_num" (ByRef rop As mpq_struct, ByRef op As mpz_struct) Declare Sub mpq_set_si Lib "libgmp-3.dll" Alias "__gmpq_set_si" (ByRef rop As mpq_struct, ByVal si As Long, ByVal ui As ULong) ' DEFECT ' Declare Sub mpq_set_ui Lib "libgmp-3.dll" Alias "__gmpq_set_ui" (ByRef rop As mpq_struct, ByRef op1 As ULong, ByRef op2 As ULong) Declare Sub mpq_set_z Lib "libgmp-3.dll" Alias "__gmpq_set_z" (ByRef rop As mpq_struct, ByRef op As mpz_struct) Declare Sub mpq_sub Lib "libgmp-3.dll" Alias "__gmpq_sub" (ByRef rop As mpq_struct, ByRef op1 As mpq_struct, ByRef op2 As mpq_struct) Declare Function mpq_get_d Lib "libgmp-3.dll" Alias "__gmpq_get_d" (ByRef op As mpq_struct) As Double Declare Function mpq_equal Lib "libgmp-3.dll" Alias "__gmpq_equal" (ByRef op1 As mpq_struct, ByRef op2 As mpq_struct) As Integer Declare Function mpq_cmp Lib "libgmp-3.dll" Alias "__gmpq_cmp" (ByRef op1 As mpq_struct, ByRef op2 As mpq_struct) As Integer ' Irrational numbers (mpf) Declare Sub mpf_init Lib "libgmp-3.dll" Alias "__gmpf_init" (ByRef rop As mpf_struct) Declare Sub mpf_set Lib "libgmp-3.dll" Alias "__gmpf_set" (ByRef rop As mpf_struct, ByRef op As mpf_struct) Declare Sub mpf_set_si Lib "libgmp-3.dll" Alias "__gmpf_set_si" (ByRef rop As mpf_struct, ByVal op As Int64) Declare Function mpf_set_str Lib "libgmp-3.dll" Alias "__gmpf_set_str" (ByRef val As mpf_struct, ByVal strval As [String], ByVal baseval As Integer) As Integer Declare Function mpf_get_str Lib "libgmp-3.dll" Alias "__gmpf_get_str" (ByVal str As [String], ByRef expptr As Long, ByVal baseval As Integer, ByVal n_digits As Integer, ByRef op As mpf_struct) As [String] Declare Sub mpf_sqrt Lib "libgmp-3.dll" Alias "__gmpf_sqrt" (ByRef rop As mpf_struct, ByRef op As mpf_struct) Declare Sub mpf_set_default_prec Lib "libgmp-3.dll" Alias "__gmpf_set_default_prec" (ByVal prec As Long) Declare Sub mpf_floor Lib "libgmp-3.dll" Alias "__gmpf_floor" (ByRef rop As mpf_struct, ByRef op As mpf_struct) Declare Sub mpf_div Lib "libgmp-3.dll" Alias "__gmpf_div" (ByRef rop As mpf_struct, ByRef op1 As mpf_struct, ByRef op2 As mpf_struct) Declare Sub mpf_sub Lib "libgmp-3.dll" Alias "__gmpf_sub" (ByRef rop As mpf_struct, ByRef op1 As mpf_struct, ByRef op2 As mpf_struct) Declare Sub mpf_sub_ui Lib "libgmp-3.dll" Alias "__gmpf_sub_ui" (ByRef rop As mpf_struct, ByRef op1 As mpf_struct, ByVal op2 As Long) 'mpf_sub_ui 'mpf_floor __GMP_PROTO ((mpf_ptr, mpf_srcptr)); Declare Function mpf_get_d Lib "libgmp-3.dll" Alias "__gmpf_get_d" (ByRef op As mpf_struct) As Double End Class