티스토리 뷰

C/Console

에라토스테네스의 체로 소수 구하기

고기상추밥 2018. 11. 16. 17:43

대량의 소수를 빠른시간에 찾아주는 알고리즘 입니다.


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
int main() {
 
#if defined(_WIN32) || defined(_WIN64)    //메모리 릭 검사
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    //_CrtSEtBreakAlloc();
#endif
 
    //로케일 설정 유니코드 함수들은 이함수에 지역값에따라 영향을 받습니다.
    //""은 현재 컴퓨터에 지정된 언어값이 설정되고
    //"Korean" 이라고하시면 한국이 설정됩니다.
    setlocale(LC_ALL, "");
 
    int32_t max = 0;
    while (true)
    {
        wprintf(u"에라토스테네스의 체를 이용하여 소수를 찾을겁니다.\n");
        wprintf(u"최대정수를 입력해주세요. 1번 = 종료\n");
        _wInput(u"int32_t"&max);
        if (max < 0)
            continue;
        else if (max == 1)
            break;
 
        int32_t* pPrime = calloc(max, sizeof(int32_t));    //배열 생성
 
        for (int32_t i = 2; i < max; ++i)    //숫자를 넣어줍니다.
            pPrime[i] = i;
 
        //2번부터 검사를 시작합니다.
        for (int32_t i = 2; i < max; ++i)        
        {
            for (int32_t j = i + i; j < max; j+=i)    
            {                                        
                if (pPrime[j] == 0)                    
                    continue;
                pPrime[j] = 0;
            }
        }
 
        for (int32_t i = 0; i < max; ++i)
        {
            if (pPrime[i] == 0)
                continue;
            printf("%d ", pPrime[i]);
        }
 
        free(pPrime);
        break;
    }
    return 0;
}
cs


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함