반응형
프로젝트 오일러 #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
'Programming > Project Euler' 카테고리의 다른 글
49. 프로젝트 오일러 #49 : 소수 순열 (0) | 2016.06.03 |
---|---|
48. 프로젝트 오일러 #48 : 자체 제곱수 (0) | 2016.06.02 |
46. 프로젝트 오일러 #46 : 골드바흐의 다른 추측 (0) | 2016.05.31 |
프로젝트 오일러 #45 삼각수, 오각수, 육각수 (0) | 2016.05.27 |
프로젝트 오일러 #44 오각수 (0) | 2016.05.26 |
댓글