⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hugecalc.h

📁 这是一个应用软件,用于处理大数,里面包含一些小的实用的软件,如生成 素数 ,大数阶乘.
💻 H
📖 第 1 页 / 共 2 页
字号:
	HHUGEINT HI_bitAnd( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );
	HHUGEINT HI_bitXor( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );
	HHUGEINT HI_bitOr( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );

	HHUGEINT HI_abs( HHUGEINT hHugeInt );
	HHUGEINT HI_negate( HHUGEINT hHugeInt );
	HHUGEINT HI_swap( HHUGEINT hLeft, HHUGEINT hRight );

	HHUGEINT HI_ceil( HHUGEINT hHugeInt, const UINT32 u32DecDigits );
	HHUGEINT HI_truncate( HHUGEINT hHugeInt, const UINT32 u32DecDigits );
	HHUGEINT HI_floor( HHUGEINT hHugeInt, const UINT32 u32DecDigits );

	HHUGEINT HI_random( HHUGEINT hHugeInt, const UINT32 u32DecDigits );
	HHUGEINT HI_generatePrime( HHUGEINT hHugeInt, const UINT32 u32DecDigits );

	/* Returns the largest prime number less than the argument. */
	HHUGEINT HI_previousPrime( HHUGEINT hResult, const HHUGEINT hBenchmark );
	/* Returns the smallest prime number greater than the argument. */
	HHUGEINT HI_nextPrime( HHUGEINT hResult, const HHUGEINT hBenchmark );

	/* + */
	HHUGEINT HI_add( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );
	HHUGEINT HI_add_u32( HHUGEINT hResult, const HHUGEINT hLeft, const UINT32 u32Num );

	/* - */
	HHUGEINT HI_sub( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );
	HHUGEINT HI_sub_u32( HHUGEINT hResult, const HHUGEINT hLeft, const UINT32 u32Num );

	/* * */
	HHUGEINT HI_mul( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );
	HHUGEINT HI_mul_u32( HHUGEINT hResult, const HHUGEINT hLeft, const UINT32 u32Num );

	/* Division, return quotient */
	HHUGEINT HI_divRem( HHUGEINT hQuotient, const HHUGEINT hDividend, const HHUGEINT hDivisor, HHUGEINT hRemainder /*= NULL*/ );
	HHUGEINT HI_div_s32( HHUGEINT hQuotient, const HHUGEINT hDividend, const SINT32 s32Divisor, SINT32 * const pRemainder /*= NULL*/ );

	/* % */
	HHUGEINT HI_mod( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );

	/* Power */
	HHUGEINT HI_pow( HHUGEINT hResult, const HHUGEINT hBase, const UINT32 u32Exp );

	/* Extraction */
	HHUGEINT HI_rootRem( HHUGEINT hRoot, const HHUGEINT hRadicand, const UINT32 u32Exp, HHUGEINT hRemainder /*= NULL*/, BOOL * const pIsReal /*= NULL*/ );

	/* Logarithm */
	const UINT32 HI_log_u32( const HHUGEINT hHugeInt, const UINT32 u32Base, BOOL * const pIsExact /*= NULL*/ );
	const UINT32 HI_log( const HHUGEINT hHugeInt, const HHUGEINT hBase, BOOL * const pIsExact /*= NULL*/ );

	/* "PrimeFactorial(n) gives the product of the first n primes." */
	HHUGEINT HI_primeFactorial( HHUGEINT hResult, const UINT32 u32Index );

	/* Factorial, Permutation, Combination */
	HHUGEINT HI_factorial( HHUGEINT hResult, const UINT32 n );
	HHUGEINT HI_factorial2( HHUGEINT hResult, const UINT32 n );
	HHUGEINT HI_permutation( HHUGEINT hResult, const UINT32 n, const UINT32 r );
	HHUGEINT HI_combination( HHUGEINT hResult, const UINT32 n, const UINT32 r );

	/* Fibonacci numbers */
	HHUGEINT HI_fibonacci( HHUGEINT hResult, const SINT32 n );

	/* Lucas numbers */
	HHUGEINT HI_lucas( HHUGEINT hResult, const SINT32 n );

	/* MulMod */
	HHUGEINT HI_mulMod( HHUGEINT hResult, const HHUGEINT hMultiplicand, const HHUGEINT hMultiplier, const HHUGEINT hMod );

	/* InvertMod: x = InvertMod( b, m ) && !(!x) <==> ( b * x ) mod m = 1 */
	HHUGEINT HI_invertMod_u32( HHUGEINT hResult, const UINT32 u32InvertBase, const HHUGEINT hMod );
	HHUGEINT HI_invertMod( HHUGEINT hResult, const HHUGEINT hInvertBase, const HHUGEINT hMod );

	/* PowMod */
	const UINT32 HI_powMod_u32_u32( const UINT32 u32Base, const HHUGEINT hExp, const UINT32 u32Mod );
	HHUGEINT HI_powMod_u32( HHUGEINT hResult, const UINT32 u32Base, const HHUGEINT hExp, const HHUGEINT hMod );
	HHUGEINT HI_powMod( HHUGEINT hResult, const HHUGEINT hBase, const HHUGEINT hExp, const HHUGEINT hMod );

	/* ModPowTen: *this %= 10^u32Exp */
	HHUGEINT HI_modPowTen( HHUGEINT hHugeInt, const UINT32 u32Exp );

	/* Greatest Common Divisor */
	HHUGEINT HI_gcd( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );
	HHUGEINT HI_gcd_vhi( HHUGEINT hResult, const LPCHUGEINT_CVECTOR vLpHugeInt );

	/* GcdEx: g = GcdEx( x, y, u, v ) = u * x + v * y. g is always positive, even if one or both of u and v are negative. */
	HHUGEINT HI_gcdEx( HHUGEINT hResult, HHUGEINT x, HHUGEINT y, const HHUGEINT u, const HHUGEINT v );

	/* Lowest Common Multiple */
	HHUGEINT HI_lcm( HHUGEINT hResult, const HHUGEINT hLeft, const HHUGEINT hRight );
	HHUGEINT HI_lcm_v32( HHUGEINT hResult, const UINT32_CVECTOR vU32Num );
	HHUGEINT HI_lcm_vhi( HHUGEINT hResult, const LPCHUGEINT_CVECTOR vLpHugeInt );

	HHUGEINT HI_product_v32( HHUGEINT hResult, const UINT32_CVECTOR vU32Num );
	HHUGEINT HI_product_vhi( HHUGEINT hResult, const LPCHUGEINT_CVECTOR vLpHugeInt );

	/* if u32Exp==0, then call function: Product( ... ); */
	HHUGEINT HI_sumsOfLikePowers_v32( HHUGEINT hResult, const UINT32_CVECTOR vU32Num, const UINT32 u32Exp /*= 1*/ );
	HHUGEINT HI_sumsOfLikePowers_vhi( HHUGEINT hResult, const LPCHUGEINT_CVECTOR vLpHugeInt, const UINT32 u32Exp /*= 1*/ );

	/* Output */
	const LPCTSTR HI_getStr( const HHUGEINT hHugeInt, const BYTE byFormat /*= FS_DEFAULT*/, UINT32 * const pStrLen /*= NULL*/ );

	/* no "0x" */
	const LPCTSTR HI_getHexStr( const HHUGEINT hHugeInt, const BYTE byFormat /*= FS_DEFAULT*/, UINT32 * const pStrLen /*= NULL*/ );

	/* This function can convert the huge integer to a string of digits in another Radix system. */
	const LPCTSTR HI_getStrRadix( const HHUGEINT hHugeInt, const UINT32 u32Radix /*= 16*/, UINT32 * const pDigits /*= NULL*/, const BYTE byFormat /*= FS_DEFAULT*/, const UINT32 u32BandLength /*= 4*/, UINT32 * const pStrLen /*= NULL*/ );

	void HI_freeStrBuffer( const HHUGEINT hHugeInt );
#endif	/* #ifndef _NO_HI */



#ifndef _NO_HX
	/* constructor */
	HHUGEINTX HX_new( void );

	/* destructor */
	void HX_delete( HHUGEINTX hHugeIntX );

	const UINT32 HX_getCount( void );

	/* reload operators */
	HHUGEINTX HX_set_s32( HHUGEINTX hHugeIntX, const SINT32 s32Num );
	HHUGEINTX HX_set_s64( HHUGEINTX hHugeIntX, const SINT64 s64Num );
	HHUGEINTX HX_set_u32( HHUGEINTX hHugeIntX, const UINT32 u32Num );
	HHUGEINTX HX_set_u64( HHUGEINTX hHugeIntX, const UINT64 u64Num );
	HHUGEINTX HX_set_str( HHUGEINTX hHugeIntX, const LPCTSTR lpszNum );

#ifndef _NO_HI
	HHUGEINTX HX_set_hi( HHUGEINTX hHugeIntX, const HHUGEINT hRight );
#endif	/* #ifndef _NO_HI */

	HHUGEINTX HX_set_hx( HHUGEINTX hHugeIntX, const HHUGEINTX hRight );

#ifndef _NO_RC
	HHUGEINTX HX_set_rc( HHUGEINTX hHugeIntX, const HRADIXCONVERTER hRight );
#endif	/* #ifndef _NO_RC */

	HHUGEINTX HX_setHexStr( HHUGEINTX hHugeIntX, const LPCTSTR lpszHexNum );

	HHUGEINTX HX_setText( HHUGEINTX hHugeIntX, const LPCTSTR lpszText );

	/* Return non-zero if the value of (*this) fits in SINT32, UINT32, SINT64 or UINT64, respectively. Otherwise, return zero. */
	const SINT32 HX_get_s32( const HHUGEINTX hHugeIntX );
	const SINT64 HX_get_s64( const HHUGEINTX hHugeIntX );
	const UINT32 HX_get_u32( const HHUGEINTX hHugeIntX );
	const UINT64 HX_get_u64( const HHUGEINTX hHugeIntX );

	/* CompareAbs */
	const SINT32 HX_compareAbs_s32( const HHUGEINTX hLeft, const SINT32 s32Num );
	const SINT32 HX_compareAbs_u32( const HHUGEINTX hLeft, const UINT32 u32Num );
	const SINT32 HX_compareAbs_hx( const HHUGEINTX hLeft, const HHUGEINTX hRight );

	/* Compare */
	const SINT32 HX_compare_s32( const HHUGEINTX hLeft, const SINT32 s32Num );
	const SINT32 HX_compare_u32( const HHUGEINTX hLeft, const UINT32 u32Num );
	const SINT32 HX_compare_hx( const HHUGEINTX hLeft, const HHUGEINTX hRight );

	/* get property */
	const SIGN HX_getSign( const HHUGEINTX hHugeIntX );
	const BOOL HX_isZero( const HHUGEINTX hHugeIntX );
	const BOOL HX_isAbsOne( const HHUGEINTX hHugeIntX );
	const BOOL HX_isOdd( const HHUGEINTX hHugeIntX );
	const BOOL HX_isEven( const HHUGEINTX hHugeIntX );
	const BOOL HX_isBitOne( const HHUGEINTX hHugeIntX, const UINT32 u32BitIndex );
	const BOOL HX_isPrime( const HHUGEINTX hHugeIntX );
	const PRIMALITY HX_testPrimality( const HHUGEINTX hHugeIntX, const UINT32 u32Repeat /*= 5*/ );
	const UINT32 HX_getBits( const HHUGEINTX hHugeIntX );
	const UINT32 HX_getDigits( const HHUGEINTX hHugeIntX );
	const UINT32 HX_getTailBitZeros( const HHUGEINTX hHugeIntX );

	HHUGEINTX HX_bitLShift( HHUGEINTX hHugeIntX, const UINT32 u32BitLShift );
	HHUGEINTX HX_bitRShift( HHUGEINTX hHugeIntX, const UINT32 u32BitRShift );

	HHUGEINTX HX_bitAnd( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );
	HHUGEINTX HX_bitXor( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );
	HHUGEINTX HX_bitOr( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );

	HHUGEINTX HX_abs( HHUGEINTX hHugeIntX );
	HHUGEINTX HX_negate( HHUGEINTX hHugeIntX );
	HHUGEINTX HX_swap( HHUGEINTX hLeft, HHUGEINTX hRight );

	HHUGEINTX HX_ceil( HHUGEINTX hHugeIntX, const UINT32 u32Bits );
	HHUGEINTX HX_truncate( HHUGEINTX hHugeIntX, const UINT32 u32Bits );
	HHUGEINTX HX_floor( HHUGEINTX hHugeIntX, const UINT32 u32Bits );

	HHUGEINTX HX_random( HHUGEINTX hHugeIntX, const UINT32 u32Bits );
	HHUGEINTX HX_generatePrime( HHUGEINTX hHugeIntX, const UINT32 u32Bits );

	/* Returns the largest prime number less than the argument. */
	HHUGEINTX HX_previousPrime( HHUGEINTX hResult, const HHUGEINTX hBenchmark );
	/* Returns the smallest prime number greater than the argument. */
	HHUGEINTX HX_nextPrime( HHUGEINTX hResult, const HHUGEINTX hBenchmark );

	/* + */
	HHUGEINTX HX_add( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );
	HHUGEINTX HX_add_u32( HHUGEINTX hResult, const HHUGEINTX hLeft, const UINT32 u32Num );

	/* - */
	HHUGEINTX HX_sub( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );
	HHUGEINTX HX_sub_u32( HHUGEINTX hResult, const HHUGEINTX hLeft, const UINT32 u32Num );

	/* * */
	HHUGEINTX HX_mul( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );
	HHUGEINTX HX_mul_u32( HHUGEINTX hResult, const HHUGEINTX hLeft, const UINT32 u32Num );

	/* Division, return quotient */
	HHUGEINTX HX_divRem( HHUGEINTX hQuotient, const HHUGEINTX hDividend, const HHUGEINTX hDivisor, HHUGEINTX hRemainder /*= NULL*/ );
	HHUGEINTX HX_div_s32( HHUGEINTX hQuotient, const HHUGEINTX hDividend, const SINT32 s32Divisor, SINT32 * const pRemainder /*= NULL*/ );

	/* % */
	HHUGEINTX HX_mod( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );

	/* Power */
	HHUGEINTX HX_pow( HHUGEINTX hResult, const HHUGEINTX hBase, const UINT32 u32Exp );

	/* Extraction */
	HHUGEINTX HX_rootRem( HHUGEINTX hRoot, const HHUGEINTX hRadicand, const UINT32 u32Exp, HHUGEINTX hRemainder /*= NULL*/, BOOL * const pIsReal /*= NULL*/ );

	/* Logarithm */
	const UINT32 HX_log_u32( const HHUGEINTX hHugeIntX, const UINT32 u32Base, BOOL * const pIsExact /*= NULL*/ );
	const UINT32 HX_log( const HHUGEINTX hHugeIntX, const HHUGEINTX hBase, BOOL * const pIsExact /*= NULL*/ );

	/* "PrimeFactorial(n) gives the product of the first n primes." */
	HHUGEINTX HX_primeFactorial( HHUGEINTX hResult, const UINT32 u32Index );

	/* Factorial, Permutation, Combination */
	HHUGEINTX HX_factorial( HHUGEINTX hResult, const UINT32 n );
	HHUGEINTX HX_factorial2( HHUGEINTX hResult, const UINT32 n );
	HHUGEINTX HX_permutation( HHUGEINTX hResult, const UINT32 n, const UINT32 r );
	HHUGEINTX HX_combination( HHUGEINTX hResult, const UINT32 n, const UINT32 r );

	/* Fibonacci numbers */
	HHUGEINTX HX_fibonacci( HHUGEINTX hResult, const SINT32 n );

	/* Lucas numbers */
	HHUGEINTX HX_lucas( HHUGEINTX hResult, const SINT32 n );

	/* MulMod */
	HHUGEINTX HX_mulMod( HHUGEINTX hResult, const HHUGEINTX hMultiplicand, const HHUGEINTX hMultiplier, const HHUGEINTX hMod );

	/* InvertMod: x = InvertMod( b, m ) && !(!x) <==> ( b * x ) mod m = 1 */
	HHUGEINTX HX_invertMod_u32( HHUGEINTX hResult, const UINT32 u32InvertBase, const HHUGEINTX hMod );
	HHUGEINTX HX_invertMod( HHUGEINTX hResult, const HHUGEINTX hInvertBase, const HHUGEINTX hMod );

	/* PowMod */
	const UINT32 HX_powMod_u32_u32( const UINT32 u32Base, const HHUGEINTX hExp, const UINT32 u32Mod );
	HHUGEINTX HX_powMod_u32( HHUGEINTX hResult, const UINT32 u32Base, const HHUGEINTX hExp, const HHUGEINTX hMod );
	HHUGEINTX HX_powMod( HHUGEINTX hResult, const HHUGEINTX hBase, const HHUGEINTX hExp, const HHUGEINTX hMod );

	/* ModPowTen: *this %= 2^u32Exp */
	HHUGEINTX HX_modPowTwo( HHUGEINTX hHugeIntX, const UINT32 u32Exp );

	/* Greatest Common Divisor */
	HHUGEINTX HX_gcd( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );
	HHUGEINTX HX_gcd_vhx( HHUGEINTX hResult, const LPCHUGEINTX_CVECTOR vLpHugeIntX );

	/* GcdEx: g = GcdEx( x, y, u, v ) = u * x + v * y. g is always positive, even if one or both of u and v are negative. */
	HHUGEINTX HX_gcdEx( HHUGEINTX hResult, HHUGEINTX x, HHUGEINTX y, const HHUGEINTX u, const HHUGEINTX v );

	/* Lowest Common Multiple */
	HHUGEINTX HX_lcm( HHUGEINTX hResult, const HHUGEINTX hLeft, const HHUGEINTX hRight );
	HHUGEINTX HX_lcm_v32( HHUGEINTX hResult, const UINT32_CVECTOR vU32Num );
	HHUGEINTX HX_lcm_vhx( HHUGEINTX hResult, const LPCHUGEINTX_CVECTOR vLpHugeIntX );

	HHUGEINTX HX_product_v32( HHUGEINTX hResult, const UINT32_CVECTOR vU32Num );
	HHUGEINTX HX_product_vhx( HHUGEINTX hResult, const LPCHUGEINTX_CVECTOR vLpHugeIntX );

	/* if u32Exp==0, then call function: Product( ... ); */
	HHUGEINTX HX_sumsOfLikePowers_v32( HHUGEINTX hResult, const UINT32_CVECTOR vU32Num, const UINT32 u32Exp /*= 1*/ );
	HHUGEINTX HX_sumsOfLikePowers_vhx( HHUGEINTX hResult, const LPCHUGEINTX_CVECTOR vLpHugeIntX, const UINT32 u32Exp /*= 1*/ );

	/* Output */
	const LPCTSTR HX_getStr( const HHUGEINTX hHugeIntX, const BYTE byFormat /*= FS_DEFAULT*/, UINT32 * const pStrLen /*= NULL*/ );

	/* no "0x" */
	const LPCTSTR HX_getHexStr( const HHUGEINTX hHugeIntX, const BYTE byFormat /*= FS_DEFAULT*/, UINT32 * const pStrLen /*= NULL*/ );

	/* This function can convert the huge integer to a string of digits in another Radix system. */
	const LPCTSTR HX_getStrRadix( const HHUGEINTX hHugeIntX, const UINT32 u32Radix /*= 10*/, UINT32 * const pDigits/* = NULL*/, const BYTE byFormat /*= FS_DEFAULT*/, const UINT32 u32BandLength /*= 3*/, UINT32 * const pStrLen /*= NULL*/ );

	const LPCTSTR HX_getText( const HHUGEINTX hHugeIntX );

	void HX_freeStrBuffer( const HHUGEINTX hHugeIntX );
#endif  /* #ifndef _NO_HX */



#ifndef _NO_RC
	HRADIXCONVERTER RC_new( const UINT32 u32Radix );
	/* For bases up to 36, case is ignored; upper-case and lower-case letters have the same value. For bases */
	/* 37 to 62, upper-case letter represent the usual 10..35 while lower-case letter represent 36..61. */
	HRADIXCONVERTER RC_new_str( const UINT32 u32Radix, const LPCTSTR lpszNum );
	void RC_delete( HRADIXCONVERTER hRadixConverter );

	const UINT32 RC_getCount( void );

	HRADIXCONVERTER RC_convert2Radix( HRADIXCONVERTER hRadixConverter, const UINT32 u32NewRadix );

	HRADIXCONVERTER RC_set_rc( HRADIXCONVERTER hRadixConverter, const HRADIXCONVERTER hRight );

#ifndef _NO_HI
	HRADIXCONVERTER RC_set_hi( HRADIXCONVERTER hRadixConverter, const HHUGEINT hRight );
#endif  /* #ifndef _NO_HI */

#ifndef _NO_HX
	HRADIXCONVERTER RC_set_hx( HRADIXCONVERTER hRadixConverter, const HHUGEINTX hRight );
#endif  /* #ifndef _NO_HX */

	HRADIXCONVERTER RC_set_s32( HRADIXCONVERTER hRadixConverter, const SINT32 s32Num );
	HRADIXCONVERTER RC_set_s64( HRADIXCONVERTER hRadixConverter, const SINT64 s64Num );
	HRADIXCONVERTER RC_set_u32( HRADIXCONVERTER hRadixConverter, const UINT32 u32Num );
	HRADIXCONVERTER RC_set_u64( HRADIXCONVERTER hRadixConverter, const UINT64 u64Num );

	/* Return non-zero if the value of (*this) fits in SINT32, UINT32, SINT64 or UINT64, respectively. Otherwise, return zero. */
	const SINT32 RC_get_s32( const HRADIXCONVERTER hRadixConverter );
	const SINT64 RC_get_s64( const HRADIXCONVERTER hRadixConverter );
	const UINT32 RC_get_u32( const HRADIXCONVERTER hRadixConverter );
	const UINT64 RC_get_u64( const HRADIXCONVERTER hRadixConverter );

	void RC_resetRadix( HRADIXCONVERTER hRadixConverter, const UINT32 u32Radix );
	void RC_resetSign( HRADIXCONVERTER hRadixConverter, const SIGN enumSign );
	void RC_resetVector( HRADIXCONVERTER hRadixConverter, const UINT32_CVECTOR Vector );
	void RC_clearVector( HRADIXCONVERTER hRadixConverter );

	const UINT32 RC_getRadix( const HRADIXCONVERTER hRadixConverter );
	const SIGN RC_getSign( const HRADIXCONVERTER hRadixConverter );
	void RC_getVector( const HRADIXCONVERTER hRadixConverter, UINT32_CVECTOR * const pVector );
	const UINT64 RC_sumOfDigits( const HRADIXCONVERTER hRadixConverter );
#endif	/* #ifndef _NO_RC */


#ifdef  __cplusplus
}
#endif

#endif /* !defined(AFX_HUGECALC_H__99330C8A_F843_4e32_876B_D0DF036B4E05__INCLUDED_) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -