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

📄 ansi_c.c

📁 这是一个应用软件,用于处理大数,里面包含一些小的实用的软件,如生成 素数 ,大数阶乘.
💻 C
字号:
// ansi_c.cpp
//

#include <stdio.h>
#include "../../../HugeCalc_API/Win32API/hugeCalc.h"

#if 1
	#define _Test_HI
	#define hHugeInt	HHUGEINT
#else
	#define _Test_HX
	#define hHugeInt	HHUGEINTX
#endif

//	http://www.swox.com/gmp/#TRY
//	1 + gcd(87324,78263148,7896) * (10^1989879887 mod 471!)

int main(int argc, char* argv[])
{
	const UINT32 u32Num[] = { 87324, 78263148, 7896 };
	const UINT32_CVECTOR vU32Num = { &(u32Num[0]), sizeof( u32Num ) / sizeof( u32Num[0] ) };

	LPCTSTR lpShow = NULL;

	UINT32 u32Digits;
	UINT32 u32Timer_Calc, u32Timer_Output;

	hHugeInt hResult;
	hHugeInt hBase;
	hHugeInt hExp;
	hHugeInt hMod;

	if ( !hugeCalcDLLInit( "../../" ))
	{
		return (-1);
	}

	printf( "Call %s\r\n", HC_getVer());

	if ( HC_LICENSE_NONE == HC_getLicenseLevel())
	{
		printf( "\r\n警告:您未通过 HugeCalc.dll 的许可认证!" \
				"\r\n解决方案可选下列方案之一:" \
				"\r\n    一、请移动到文件夹“../CopyrightByGuoXianqiang[/..]/” 下;" \
				"\r\n    二、或请在 HugeCalc.chm 中进行注册(一劳永逸)。" );

		return 0;
	}

	// 开始计算计时
	HC_enableTimer( TRUE );
	HC_resetTimer( 0, TIMER_UNIT_us );

#ifdef _Test_HI

	hResult = HI_new();
	hBase = HI_new();
	hExp = HI_new();
	hMod = HI_new();

	HI_set_u32( hBase, 10 );
	HI_set_u32( hExp, 1989879887 );
	HI_factorial( hMod, 471 );

	// hResult = hBase ^ hExp mod hMod
	HI_powMod( hResult, hBase, hExp, hMod );

	// hResult = hResult * gcd(87324,78263148,7896);
	HI_mul_u32( hResult, hResult, HC_gcd_v32( vU32Num ) );

	// hResult = hResult + 1;
	HI_add_u32( hResult, hResult, 1 );

	u32Timer_Calc = HC_getTimer( TIMER_UNIT_ms );

	u32Digits = HI_getDigits( hResult );

	HC_resetTimer( 0, TIMER_UNIT_us );

	lpShow = HI_getStr( hResult, FS_NORMAL, NULL );

	u32Timer_Output = HC_getTimer( TIMER_UNIT_us );

	printf( "\r\nThe result of executing 1 + gcd(87324,78263148,7896) * (10^1989879887 mod 471!) is:\r\n\r\n" \
		"%s (%u digits)\r\n\r\n" \
		"computation took %u ms\r\n" \
		"output conversion took %u us\r\n\r\n", lpShow, u32Digits, u32Timer_Calc, u32Timer_Output );

	// new 的对象最后必须 delete;如果不及时 delete,HugeCalc.DLL 在 free 时将自动 delete
	// 建议:显式调用 XX_delete(..) 以便及时释放空间
	HI_delete( hResult );
	HI_delete( hBase );
	HI_delete( hExp );
	HI_delete( hMod );

#else // _Test_HX

	hResult = HX_new();
	hBase = HX_new();
	hExp = HX_new();
	hMod = HX_new();

	HX_set_u32( hBase, 10 );
	HX_set_u32( hExp, 1989879887 );
	HX_factorial( hMod, 471 );

	// hResult = hBase ^ hExp mod hMod
	HX_powMod( hResult, hBase, hExp, hMod );

	// hResult = hResult * gcd(87324,78263148,7896);
	HX_mul_u32( hResult, hResult, HC_gcd_v32( vU32Num ) );

	// hResult = hResult + 1;
	HX_add_u32( hResult, hResult, 1 );

	u32Timer_Calc = HC_getTimer( TIMER_UNIT_ms );

	u32Digits = HX_getDigits( hResult );

	HC_resetTimer( 0, TIMER_UNIT_us );

	lpShow = HX_getStr( hResult, FS_NORMAL, NULL );

	u32Timer_Output = HC_getTimer( TIMER_UNIT_us );

	printf( "\r\nThe result of executing 1 + gcd(87324,78263148,7896) * (10^1989879887 mod 471!) is:\r\n\r\n" \
		"%s (%u digits)\r\n\r\n" \
		"computation took %u ms\r\n" \
		"output conversion took %u us\r\n\r\n", lpShow, u32Digits, u32Timer_Calc, u32Timer_Output );

	// new 的对象最后必须 delete;如果不及时 delete,HugeCalc.DLL 在 free 时将自动 delete
	// 建议:显式调用 XX_delete(..) 以便及时释放空间
	HX_delete( hResult );
	HX_delete( hBase );
	HX_delete( hExp );
	HX_delete( hMod );

#endif

	hugeCalcDLLFree();
	system( "pause" );

	return 0;
}

⌨️ 快捷键说明

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