#include #include #include "../../../HugeCalc_API/CppAPI/Include/HugeCalc.h" // 公共接口 #pragma message( "automatic link to ../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" ) #pragma comment( lib, "../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" ) #define TEN_POW2 100UL #define TEN_POW4 10000UL int main( void ) { const UINT32 cycleDelta[ 4 ] = { 1, 3, 3, 2 }; // 0, 1, 4, 7 UINT32 table[ TEN_POW4 ]; UINT32 mark[ 9*4*5 + 1 ]; UINT32 value[ 5 ], delta[ 5 ]; UINT32 * p = table; UINT32 i, j, k, m, s; UINT32 i2, i3, i4, s2, s3; HugeCalc::EnableTimer(); HugeCalc::ResetTimer(); for ( i4 = 0; i4 < 10; ++i4 ) { for ( i3 = 0; i3 < 10; ++i3 ) { s3 = i4 + i3; for ( i2 = 0; i2 < 10; ++i2 ) { s2 = s3 + i2; for ( i = 0; i < 10; ++i ) { *p++ = s2 + i; } } } } memset( mark, 0, sizeof( mark )); memset( value, 0, sizeof( value )); memset( delta, 0, sizeof( delta )); k = 1; j = TEN_POW2; value[ 0 ] = 0; delta[ 0 ] = 1; m = 1; for ( ; ; ) { s = 0; for ( i = 0; i < m; ++i ) { value[ i ] += delta[ i ]; if ( value[ i ] >= TEN_POW4 ) { value[ i ] -= TEN_POW4; ++value[ i + 1 ]; } s += table[ value[ i ] ]; } if ( 0 == mark[ s ] ) { mark[ s ] = k; } if ( j == ++k ) { if ( 0 == k ) { break; } j *= ( 5 == ++m ) ? 0 : TEN_POW2; } delta[ 0 ] += 2; i = 0; while ( delta[ i ] >= TEN_POW4 ) { delta[ i ] -= TEN_POW4; ++delta[ ++i ]; } } HugeCalc::EnableTimer( FALSE ); s = 0; i = 0; while ( s < 9*4*5 ) { s += cycleDelta[ i ]; if ( 4 == ++i ) { i = 0; } if ( 0 != mark[ s ] ) { if ( mark[ s ] <= 0xFFFF ) { printf( "X = %u\tS = %u\n", s, mark[ s ] * mark[ s ] ); } else { printf( "X = %u\tS = %I64u\n", s, UInt32x32To64( mark[ s ], mark[ s ] )); } } else { printf( "X = %u\n", s ); } } printf( HugeCalc::GetTimerStr( FT_DOT06SEC_s ) ); printf( "\n" ); return 0; }