📄 g_lip.h
字号:
/* x = floor(a); */ /************************************************************************ Square roots*************************************************************************/ long _ntl_gsqrts(long n); /* return floor(sqrt(n)); error raised in n < 0 */ void _ntl_gsqrt(_ntl_gbigint n, _ntl_gbigint *r); /* *r = floor(sqrt(n)); error raised in n < 0 *//********************************************************************* Exponentiation **********************************************************************/ void _ntl_gexp(_ntl_gbigint a, long e, _ntl_gbigint *b); /* *b = a^e; error raised if e < 0 */ void _ntl_gexps(long a, long e, _ntl_gbigint *b); /* *b = a^e; error raised if e < 0 */ /********************************************************************* Modular Arithmetic Addition, subtraction, multiplication, squaring division, inversion, and exponentiation modulo a positive modulus n, where all operands (except for the exponent in exponentiation) and results are in the range [0, n-1]. ALIAS RESTRICTION: output parameters should not alias n***********************************************************************/ void _ntl_gaddmod(_ntl_gbigint a, _ntl_gbigint b, _ntl_gbigint n, _ntl_gbigint *c); /* *c = (a + b) % n */ void _ntl_gsubmod(_ntl_gbigint a, _ntl_gbigint b, _ntl_gbigint n, _ntl_gbigint *c); /* *c = (a - b) % n */ void _ntl_gsmulmod(_ntl_gbigint a, long b, _ntl_gbigint n, _ntl_gbigint *c); /* *c = (a * b) % n */ void _ntl_gmulmod(_ntl_gbigint a, _ntl_gbigint b, _ntl_gbigint n, _ntl_gbigint *c); /* *c = (a * b) % n */ void _ntl_gsqmod(_ntl_gbigint a, _ntl_gbigint n, _ntl_gbigint *c); /* *c = (a ^ 2) % n */ void _ntl_ginvmod(_ntl_gbigint a, _ntl_gbigint n, _ntl_gbigint *c); /* *c = (1 / a) % n; error raised if gcd(b, n) != 1 */ void _ntl_gpowermod(_ntl_gbigint g, _ntl_gbigint e, _ntl_gbigint F, _ntl_gbigint *h); /* *b = (a ^ e) % n; *//************************************************************************** Euclidean Algorithms***************************************************************************/ void _ntl_ggcd(_ntl_gbigint m1, _ntl_gbigint m2, _ntl_gbigint *r); /* *r = greatest common divisor of m1 and m2; uses binary gcd algorithm */ void _ntl_gexteucl(_ntl_gbigint a, _ntl_gbigint *xa, _ntl_gbigint b, _ntl_gbigint *xb, _ntl_gbigint *d); /* *d = a * *xa + b * *xb = gcd(a, b); sets *d, *xa and *xb given a and b; uses Lehmer`s trick */ long _ntl_ginv(_ntl_gbigint a, _ntl_gbigint b, _ntl_gbigint *c); /* if (a and b coprime) { *c = inv; return(0); } else { *c = gcd(a, b); return(1); } where inv is such that (inv * a) == 1 mod b; error raised if a < 0 or b <= 0 */ long _ntl_gxxratrecon(_ntl_gbigint x, _ntl_gbigint m, _ntl_gbigint a_bound, _ntl_gbigint b_bound, _ntl_gbigint *a, _ntl_gbigint *b); /* rational reconstruction: see doc in ZZ.txt */ /********************************************************************** Storage Allocation These routines use malloc and free.***********************************************************************/ void _ntl_gsetlength(_ntl_gbigint *v, long len); /* Allocates enough space to hold a len-digit number, where each digit has NTL_NBITS bits. If space must be allocated, space for one extra digit is always allocated. */ void _ntl_gfree(_ntl_gbigint *x); /* Free's space held by x, and sets x back to 0. *//******************************************************************* Special routines********************************************************************/long _ntl_gsize(_ntl_gbigint n);long _ntl_gisone(_ntl_gbigint n);long _ntl_gsptest(_ntl_gbigint a);long _ntl_gwsptest(_ntl_gbigint a);long _ntl_gcrtinrange(_ntl_gbigint g, _ntl_gbigint a);void _ntl_gfrombytes(_ntl_gbigint *x, const unsigned char *p, long n);void _ntl_gbytesfromz(unsigned char *p, _ntl_gbigint a, long nn);long _ntl_gblock_construct_alloc(_ntl_gbigint *x, long d, long n);void _ntl_gblock_construct_set(_ntl_gbigint x, _ntl_gbigint *y, long i);long _ntl_gblock_destroy(_ntl_gbigint x);long _ntl_gblock_storage(long d);void _ntl_gcrt_struct_init(void **crt_struct, long n, _ntl_gbigint p, const long *primes);void _ntl_gcrt_struct_insert(void *crt_struct, long i, _ntl_gbigint m);void _ntl_gcrt_struct_free(void *crt_struct);void _ntl_gcrt_struct_eval(void *crt_struct, _ntl_gbigint *t, const long *a);long _ntl_gcrt_struct_special(void *crt_struct);void _ntl_grem_struct_init(void **rem_struct, long n, _ntl_gbigint p, const long *primes);void _ntl_grem_struct_free(void *rem_struct);void _ntl_grem_struct_eval(void *rem_struct, long *x, _ntl_gbigint a);#if (defined(__cplusplus) && !defined(NTL_CXX_ONLY))}#endifextern int _ntl_gmp_hack;#define NTL_crt_struct_eval _ntl_gcrt_struct_eval#define NTL_crt_struct_free _ntl_gcrt_struct_free#define NTL_crt_struct_init _ntl_gcrt_struct_init#define NTL_crt_struct_insert _ntl_gcrt_struct_insert#define NTL_crt_struct_special _ntl_gcrt_struct_special#define NTL_rem_struct_eval _ntl_grem_struct_eval#define NTL_rem_struct_free _ntl_grem_struct_free#define NTL_rem_struct_init _ntl_grem_struct_init#define NTL_verylong _ntl_gbigint#define NTL_z2log _ntl_g2log#define NTL_zabs _ntl_gabs#define NTL_zadd _ntl_gadd#define NTL_zaddmod _ntl_gaddmod#define NTL_zand _ntl_gand#define NTL_zbit _ntl_gbit#define NTL_zblock_construct_alloc _ntl_gblock_construct_alloc#define NTL_zblock_construct_set _ntl_gblock_construct_set#define NTL_zblock_destroy _ntl_gblock_destroy#define NTL_zblock_storage _ntl_gblock_storage#define NTL_zbytesfromz _ntl_gbytesfromz#define NTL_zcompare _ntl_gcompare#define NTL_zcopy _ntl_gcopy#define NTL_zcrtinrange _ntl_gcrtinrange#define NTL_zdiv _ntl_gdiv#define NTL_zdoub _ntl_gdoub#define NTL_zdoubtoz _ntl_gdoubtoz#define NTL_zexp _ntl_gexp#define NTL_zexps _ntl_gexps#define NTL_zexteucl _ntl_gexteucl#define NTL_zfree _ntl_gfree#define NTL_zfrombytes _ntl_gfrombytes#define NTL_zgcd _ntl_ggcd#define NTL_zintoz _ntl_gintoz#define NTL_zinv _ntl_ginv#define NTL_zinvmod _ntl_ginvmod#define NTL_zisone _ntl_gisone#define NTL_ziszero _ntl_giszero#define NTL_zlog _ntl_glog#define NTL_zlowbits _ntl_glowbits#define NTL_zlshift _ntl_glshift#define NTL_zmakeodd _ntl_gmakeodd#define NTL_zmod _ntl_gmod#define NTL_zmul _ntl_gmul#define NTL_zmulmod _ntl_gmulmod#define NTL_znegate _ntl_gnegate#define NTL_znumtwos _ntl_gnumtwos#define NTL_zodd _ntl_godd#define NTL_zone _ntl_gone#define NTL_zor _ntl_gor#define NTL_zpowermod _ntl_gpowermod#define NTL_zquickmod _ntl_gquickmod#define NTL_zround_correction _ntl_ground_correction#define NTL_zrshift _ntl_grshift#define NTL_zsadd _ntl_gsadd#define NTL_zscompare _ntl_gscompare#define NTL_zsdiv _ntl_gsdiv#define NTL_zsetbit _ntl_gsetbit#define NTL_zsetlength _ntl_gsetlength#define NTL_zsign _ntl_gsign#define NTL_zsize _ntl_gsize#define NTL_zslowbits _ntl_gslowbits#define NTL_zsmod _ntl_gsmod#define NTL_zsmul _ntl_gsmul#define NTL_zsmulmod _ntl_gsmulmod#define NTL_zsptest _ntl_gsptest#define NTL_zsq _ntl_gsq#define NTL_zsqmod _ntl_gsqmod#define NTL_zsqrt _ntl_gsqrt#define NTL_zsqrts _ntl_gsqrts#define NTL_zsub _ntl_gsub#define NTL_zsubmod _ntl_gsubmod#define NTL_zsubpos _ntl_gsubpos#define NTL_zswap _ntl_gswap#define NTL_zswitchbit _ntl_gswitchbit#define NTL_ztoint _ntl_gtoint#define NTL_ztouint _ntl_gtouint#define NTL_zuintoz _ntl_guintoz#define NTL_zweight _ntl_gweight#define NTL_zweights _ntl_gweights#define NTL_zwsptest _ntl_gwsptest#define NTL_zxor _ntl_gxor#define NTL_zxxratrecon _ntl_gxxratrecon#define NTL_zzero _ntl_gzero#define NTL_GMP_LIP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -