📄 ansi_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 + -