본문 바로가기

[Project Euler] Problem 007


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*<= 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*<= 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