본문 바로가기

알고리즘/SW EXPERT

3977. 페르마의 크리스마스 정리

3977. 페르마의 크리스마스 정리


처음 문제를 보고는 그냥 에라토스테네스의 체를 이용해서 문제를 푸는구나 했다.


에라토스테네스의 체를 미리 한번만 구하도록 했는데, 시간초과가 발생했다. 


그래서 아! DP문제로 다시 풀 수 있겠구나하고 제출했는데.. 정답이 계속 틀렸다.. 분명 코드는 맞는거 같은데


그러다가 문제의 댓글에 나와 똑같은 분을 봤는데..


예외적으로 2라는 값은 4로 나누었을 때 1이 아니지만, 1^2 + 1^2 이므로 정답에 해당했다..!


아주 큰 예외를 생각하지 못하고 있었다.


<정답 코드>


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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<iostream>
#include<string.h>
using namespace std;
const int MAX = 1000001;
bool prime[MAX];
int D[MAX];
void era()
{
    for (int i = 2; i*< MAX; i++)
    {
        if (prime[i])
        {
 
            for (int j = i+i; j < MAX; j += i)
            {
                prime[j] = false;
            }
        }
 
    }
 
    int sum = 0;
    for (int i = 1; i < MAX; i++)
    {
        if (prime[i] && i % 4 == 1)
        {
            sum++;
        }
        D[i] += sum;
    }
}
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    memset(prime, truesizeof(prime));
    prime[0= prime[1= false;
    era();
 
    int tc;
    cin >> tc;
    for (int t = 1; t <= tc; t++)
    {
        int s, e, ans;
        cin >> s >> e;
        ans = D[e] - D[s - 1];
    
        if (s <= 2)
        {
            ans += 1;
        }
 
        cout << "#" << t << " " << ans << "\n";
 
    }
 
    return 0;
}
cs


반응형

'알고리즘 > SW EXPERT' 카테고리의 다른 글

4206. 연구소 탈출  (0) 2018.04.09
4193. 수영대회 결승전  (0) 2018.04.09
1249.보급로  (0) 2018.04.06
2814. 최장 경로  (0) 2018.03.30
4112. 이상한 피라미드 탐험  (0) 2018.03.27