CMap 클래스에서 InitHashTable 함수를 이용하여 해시 테이블의 크기를 설정할 경우, 인자로 소수(Prime Number)를 입력해야 효율이 좋다고 합니다. 매번 소수를 찾기도 어렵고하여 소수를 구하는 함수들을 만들어 보았습니다.
코드 |
함수: /// 소수인지검사한다. inline BOOL IsPrimeNumber( int nNumber ) { int dwSqrt = ( int ) sqrt( ( double ) nNumber ) + 1; for( int i = 2; i < dwSqrt; i++ ) { if( nNumber % i == 0 ) return FALSE; }
return TRUE; }
/// 해당값보다크고가까운소수를구한다. inline int GetVPrimeNumber( int nNumber ) { ASSERT( nNumber > 1 ); for( int i = nNumber; i < UINT_MAX; i++ ) { if( IsPrimeNumber( i ) == TRUE ) return i; }
ASSERT(0); return 0; }
/// 해당값보다크고가까운소수를구한다. inline int GetVPrimeNumber( double dblNumber ) { return GetVPrimeNumber( ( int ) dblNumber ); }
/// 해당값의120 퍼센트에해당하는소수를구한다. (주로120%의크기가필요한해시테이블에서사용) inline int GetVPrimeNumber120( int nNumber ) { return GetVPrimeNumber( ( int )( nNumber*1.20f ) ); } |
'C & C++ > C & C++' 카테고리의 다른 글
SetSize 대용량 데이터 추가속도 향상 (0) | 2011.03.27 |
---|---|
CString 문자열 검색 (0) | 2011.03.27 |
CString strreplace 문자열에서 문자 변경 (0) | 2011.03.27 |
[Tip] ',' 을 3자리마다 붙여서 통화 화폐의 문자열을 리턴 (0) | 2011.03.27 |
[뮤텍스] Mutex 하나의 프로그램만 실행 (0) | 2011.03.27 |
댓글