본문 바로가기
C & C++/C & C++

CString 소수 구하는 함수

by izen8 2011. 3. 27.
반응형

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 ) );

}

반응형

댓글