kyuseo의 게임 프로그래밍

IsPrimeNumber, GetVPrimeNumber, GetVPrimeNumber120 :: 소수 관련 함수 본문

C++ 개발

IsPrimeNumber, GetVPrimeNumber, GetVPrimeNumber120 :: 소수 관련 함수

kyuseo 2007. 11. 18. 14:09

개요..

 

개요:

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

}