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 |