[Project Euler #5][C++] 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수
Problem Solving/Project Euler 2020. 11. 16. 22:56728x90
728x170
문제5 : 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수
문제
1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다.
그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까?
문제 해결 방법
하나하나씩 계산하는 방식(브루트 포스 방식)으로 문제를 해결하였다.
- 문제의 조건을 만족시키는 범위를 알 수 없는 수를 찾기 위해
unsigned long long int
자료형을 사용하였다.- 표현 가능 범위 :
0
~18,446,744,073,709,551,615
- 표현 가능 범위 :
- 2중 for 문을 사용하였다.
- 시간 복잡도 : O(n²)
1
부터ULLONG_MAX
까지 순회하는 for 문1
부터N(20)
까지 순회하는 for 문
1
부터ULLONG_MAX
까지 순회하는 수 중에서,1
부터N(20)
까지 모두 나누어 떨어지는 수가 있으면 순회를 중단하고 그 수를 정답으로 출력하도록 하였다.
소스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <iostream> #include <climits> // ULLONG_MAX using namespace std; #define N 20 int main() { unsigned long long int i, j, ans = 0; for (i = 1; i <= ULLONG_MAX; i++) { for (j = 1; j <= N; j++) { if (i % j == 0) { if (j == N) { ans = i; break; } } else { break; } } if (ans != 0) { break; } } cout << ans << endl; return 0; } |
정답
232792560 |
심화 공부
최소공배수(Least Common Multiple)
여러 개의 정수 $n_{1}, n_{2}, \dots, n_{k} \in Z : n_{k} \neq 0$ 의 최소공배수 $lcm\{n_{1}, n_{2}, \dots, n_{k}\}$ 은 재귀적으로 $lcm\{lcm\{n_{1}, n_{2}, \dots, n_{k-1}\}, n_{k}\}$ 로 정의할 수 있다.
728x90
그리드형(광고전용)
'Problem Solving > Project Euler' 카테고리의 다른 글
[Project Euler #9][C++] a + b + c = 1000 이 되는 피타고라스 수 (0) | 2020.12.23 |
---|---|
[Project Euler #8][C++] 1000자리 수 안에서 이어지는 5개 숫자의 곱 중 최댓값은? (0) | 2020.12.22 |
[Project Euler #7][C++] 10001번째의 소수 (0) | 2020.12.22 |
[Project Euler #6][C++] 1부터 100까지 "제곱의 합"과 "합의 제곱"의 차는? (0) | 2020.12.22 |
[Project Euler #4][C++] 세자리 수를 곱해 만들 수 있는 가장 큰 대칭수 (0) | 2020.11.15 |
[Project Euler #3][C++] 가장 큰 소인수 구하기 (0) | 2020.10.26 |
[Project Euler #2][C++] 피보나치 수열에서 4백만 이하이면서 짝수인 항의 합 (0) | 2020.10.24 |
[Project Euler #1][C++] 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면? (0) | 2020.10.24 |