- 注册时间
- 2007-12-26
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 92742
- 在线时间
- 小时
|
楼主 |
发表于 2009-8-9 20:07:21
|
显示全部楼层
刚刚抽空写了段代码,感觉算法已经比较高效了:- // 对应帖号: http://bbs.emath.ac.cn/viewthread.php?tid=1682&page=1&fromuid=8#pid20996
- // 请复制并覆盖 HugeCalc 安装包解压后的 ansi_c++.cpp 文件;然后,编译、运行。。。
-
- #include <iostream.h>
-
- #include "../../../HugeCalc_API/CppAPI/Include/HugeCalc.h" // 公共接口
- #include "../../../HugeCalc_API/CppAPI/Include/HugeInt.h" // 10进制系统
-
- #pragma message( "automatic link to ../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )
- #pragma comment( lib, "../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )
-
- void search( CHugeInt& hugeRoot, UINT32 r )
- {
- UINT32 i, k;
- CHugeInt hugeSetp( (UINT32)1UL ), hugePow10( (UINT32)1UL );
- CHugeInt hugeRadicand, hugeRem;
-
- if ( r <= 1 )
- {
- hugeRoot = (UINT32)1UL;
- return;
- }
-
- // k 可适当设定成较大的初值
- ( hugeSetp.DecLShift( r ) /= 9 ) *= hugePow10.DecLShift( k = 0 );
-
- cout << endl;
-
- for ( ; ; )
- {
- for ( i=1, hugeRadicand=hugePow10; 10!=i; ++i )
- {
- hugeRoot.Root( hugeRadicand += hugeSetp, r, &hugeRem, NULL );
-
- if ( !(!hugeRem) && hugeRem < hugePow10 )
- {
- ++hugeRoot.Root( hugeRadicand -= hugePow10, r, NULL, NULL );
- return;
- }
- }
-
- hugeSetp.DecLShift( 1 );
- hugePow10.DecLShift( 1 );
-
- if ( 0 == ( 63 & ++k ))
- {
- cout << "k = " << k << endl;
- }
- }
- }
-
-
- int main(int argc, char* argv[])
- {
- cout << "Call " << HugeCalc::GetVer() << endl;
-
- if ( HC_LICENSE_NONE == HugeCalc::GetLicenseLevel())
- {
- cout << endl << "警告:您未通过 HugeCalc.dll 的许可认证!" \
- << endl << endl << "解决方案可选下列方案之一:" \
- << endl << " 一、请将本程序移动到“/CopyrightByGuoXianqiang/[../]”目录下运行;" \
- << endl << " 二、或请在 HugeCalc.chm 中进行注册(一劳永逸)。" \
- << endl << endl;
- system( "pause" );
- return (-1);
- }
-
- CHugeInt hugeInt;
- UINT32 n;
-
- #if 1 // 搜索指定的 a(n)
-
- for ( ; ; )
- {
- cout << endl << "n = ";
- cin >> n;
-
- if ( 0 == n )
- {
- break;
- }
-
- // 初始化
- HugeCalc::EnableTimer( TRUE );
- HugeCalc::ResetTimer();
-
- #else // 搜索连续的的 a(n)
-
- // 初始化
- HugeCalc::EnableTimer( TRUE );
- HugeCalc::ResetTimer();
- for ( n=1; n<=128; ++n )
- {
-
- #endif
-
- search( hugeInt, n );
-
- // HugeCalc::EnableTimer( FALSE );
-
- cout << endl << HugeCalc::GetTimerStr( FT_HHMMSS_ms );
-
- cout << "\tn = " << n << "\t" << hugeInt.GetStr( FS_NORMAL ) << endl;
- }
-
- system( "pause" );
-
- return 0;
- }
复制代码 |
|