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 31 32 33 34 35 36 37 38 | #include <stdio.h> int isPrime(int num); int main() { int i; int count = 1; for (i = 2; count <= 10001; i++) { if (isPrime(i)) { ++count; } } printf("answer: %d\n", i -= 1); return 0; } int isPrime(int num) { int i; if (num != 2) { if (num % 2 == 0) { return 0; } else { for (i = 3; i*i <= num; i += 2) { if (num%i == 0) { return 0; } } } } return 1; } | cs |
정답: 104743
에라토스테네스의 체보다 이 방법이 더 적절하다고 판단했다.
실행 시간을 더 줄이려면 다음도 생각할 수 있다.
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 31 | #include <stdio.h> int isPrime(int num); int main() { int i; int count = 2; for (i = 3; count <= 10001; i += 2) { if (isPrime(i)) { ++count; } } printf("answer: %d\n", (i - 2)); return 0; } int isPrime(int num) { int i; for (i = 3; i*i <= num; i += 2) { if (num%i == 0) { return 0; } } return 1; } | cs |
소수인지 판별하는 함수를 홀수인 경우에 최적화하고,
홀수만 카운팅하는 방법이다.
'Programming > Solutions' 카테고리의 다른 글
[BAEKJOON] 2292번 (0) | 2019.03.24 |
---|---|
[BAEKJOON] 1924번 (0) | 2019.03.24 |
[Project Euler] Problem 006 (0) | 2019.03.24 |
[Project Euler] Problem 005 (0) | 2019.03.20 |
[BAEKJOON] 11721번 (0) | 2019.03.20 |