본문 바로가기
Programming/Project Euler

47. 프로젝트 오일러 #47 : 서로 다른 소인수

by 작은별하나 2016. 6. 1.
반응형

프로젝트 오일러 #47 문제는 소인수 분해를 하기만 하면, 어렵지 않게 풀 수 있습니다.

난이도는 5%입니다.



문제는 4개의 연달은 숫자들의 각각의 소인수 갯수가 4개인 첫번째 숫자를 찾으라는 것입니다.


그동안 소인수분해는 많이 해왔지만, 이와 같은 문제는 미리 소수를 찾아내는 것이 편합니다.  범위가 지정되어 있지 않으므로, 충분히 큰 수까지 찾을 수도 있지만, 문제를 풀면서, 소인수분해한 결과가 소수이면, 소수 리스트에 저장하는 방법도 있을 수 있습니다.


제 경우에는 소수 리스트를 관리하지 않고, 작은 수부터 인수를 찾는 방식으로 했습니다.





#include <stdio.h>

bool GetPFactor(int p, int r);
int main()
{
    int count = 0;

    for( int i = 644 ; ; i++ )
    {
        if( GetPFactor( i, 4 ) == false ) { count = 0; continue; }
        if( ++count == 4 )
        {
            printf("%d\n", i-3);
            break;
        }
    }
}

bool GetPFactor(int p, int r)
{
    int t = 0;
    if( p%2 == 0 )
    {
        do { p/=2; } while( p%2 == 0 );
        t++;
    }

    for( int i = 3 ; t < r && p > 1 ; i += 2 )
    {
        if( p%i ) continue;
        do p/=i; while( p%i == 0 );
        t++;
    }
    return ( p == 1 && t == r );
}

728x90

댓글