#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
#include <time.h>
int main(void)
{
clock_t start, end;
double result;
int m, n; // 시작하는 수와 끝의 수를 입력받는다.
scanf("%d %d", &m, &n);
int size = n - m + 1;
int* eratosthenes = (int*)malloc(sizeof(int) * size); // m이상 n이하의 수들을 일단 먼저 모두 저장한다.
int centinel = (int)sqrt(n); // n의 제곱근의 배수만 지우면 된다.
int flag = 0;
start = clock(); //시간 측정 시작
for (int i = m, j = 0; i <= n, j < size; i++, j++)
{
eratosthenes[j] = i;
}
for (int i = 2; i <= centinel; i++) // 2의 배수부터, end의 배수까지를 제거한다.
{
if ((i % 2 == 0 || i % 3 == 0) && flag > 3) // 2의 배수와 2의 배수인 경우는 이미 제거되었으므로 제거할 필요가 없다.
//변수 flag를 이용해서 2와 3인 경우를 지우는 경우를 배제한다.
{
continue;
}
for (int j = 0; j < size; j++)
{
if (eratosthenes[j] == 1) // 1은 소수가 아니므로 제거한다.
{
eratosthenes[j] = 0;
}
if (eratosthenes[j] == 0) // 이미 지워진 수인 경우, 지울 필요가 없으므로 continue로 pass 한다.
{
continue;
}
if (eratosthenes[j] % i == 0 && eratosthenes[j] != i) // 2의 배수부터 end 의 배수까지를 제거한다, 이때, 자기 자신은 지우지 않는다.
{
eratosthenes[j] = 0;
}
}
flag++;
}
end = clock(); //시간 측정 끝
for (int i = 0; i < size; i++)
{
if (eratosthenes[i] != 0) // 지워지지 않은 eratosthenes 에 저장된 수들을 출력한다.
{
printf("%d\n", eratosthenes[i]);
}
}
result = (double)(end - start);
printf("%lf", result);
free(eratosthenes);
return 0;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPG1hdGguaD4KI2luY2x1ZGUgPHRpbWUuaD4KaW50IG1haW4odm9pZCkKewoJY2xvY2tfdCBzdGFydCwgZW5kOwoJZG91YmxlIHJlc3VsdDsKCWludCBtLCBuOyAvLyDsi5zsnpHtlZjripQg7IiY7JmAIOuBneydmCDsiJjrpbwg7J6F66Cl67Cb64qU64ukLiAKCXNjYW5mKCIlZCAlZCIsICZtLCAmbik7CglpbnQgc2l6ZSA9IG4gLSBtICsgMTsKCWludCogZXJhdG9zdGhlbmVzID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpICogc2l6ZSk7IC8vIG3snbTsg4EgbuydtO2VmOydmCDsiJjrk6TsnYQg7J2864uoIOuovOyggCDrqqjrkZAg7KCA7J6l7ZWc64ukLiAKCWludCBjZW50aW5lbCA9IChpbnQpc3FydChuKTsgLy8gbuydmCDsoJzqs7Hqt7zsnZgg67Cw7IiY66eMIOyngOyasOuptCDrkJzri6QuIAoJaW50IGZsYWcgPSAwOwoJc3RhcnQgPSBjbG9jaygpOyAvL+yLnOqwhCDsuKHsoJUg7Iuc7J6RCglmb3IgKGludCBpID0gbSwgaiA9IDA7IGkgPD0gbiwgaiA8IHNpemU7IGkrKywgaisrKQoJewoJCWVyYXRvc3RoZW5lc1tqXSA9IGk7Cgl9Cglmb3IgKGludCBpID0gMjsgaSA8PSBjZW50aW5lbDsgaSsrKSAvLyAy7J2YIOuwsOyImOu2gO2EsCwgZW5k7J2YIOuwsOyImOq5jOyngOulvCDsoJzqsbDtlZzri6QuIAoJewoJCWlmICgoaSAlIDIgPT0gMCB8fCBpICUgMyA9PSAwKSAmJiBmbGFnID4gMykgLy8gMuydmCDrsLDsiJjsmYAgMuydmCDrsLDsiJjsnbgg6rK97Jqw64qUIOydtOuvuCDsoJzqsbDrkJjsl4jsnLzrr4DroZwg7KCc6rGw7ZWgIO2VhOyalOqwgCDsl4bri6QuIAoJCQkJCQkJCQkJCQkJLy/rs4DsiJggZmxhZ+ulvCDsnbTsmqntlbTshJwgMuyZgCAz7J24IOqyveyasOulvCDsp4DsmrDripQg6rK97Jqw66W8IOuwsOygnO2VnOuLpC4gCgkJewoJCQljb250aW51ZTsKCQl9CgkJZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspCgkJewoJCQlpZiAoZXJhdG9zdGhlbmVzW2pdID09IDEpIC8vIDHsnYAg7IaM7IiY6rCAIOyVhOuLiOuvgOuhnCDsoJzqsbDtlZzri6QuIAoJCQl7CgkJCQllcmF0b3N0aGVuZXNbal0gPSAwOwoJCQl9CgkJCWlmIChlcmF0b3N0aGVuZXNbal0gPT0gMCkgLy8g7J2066+4IOyngOybjOynhCDsiJjsnbgg6rK97JqwLCDsp4Dsmrgg7ZWE7JqU6rCAIOyXhuycvOuvgOuhnCBjb250aW51ZeuhnCBwYXNzIO2VnOuLpC4gCgkJCXsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmIChlcmF0b3N0aGVuZXNbal0gJSBpID09IDAgJiYgZXJhdG9zdGhlbmVzW2pdICE9IGkpIC8vIDLsnZgg67Cw7IiY67aA7YSwIGVuZCDsnZgg67Cw7IiY6rmM7KeA66W8IOygnOqxsO2VnOuLpCwg7J2065WMLCDsnpDquLAg7J6Q7Iug7J2AIOyngOyasOyngCDslYrripTri6QuICAKCQkJewoJCQkJZXJhdG9zdGhlbmVzW2pdID0gMDsKCQkJfQoJCX0KCQlmbGFnKys7Cgl9CgllbmQgPSBjbG9jaygpOyAvL+yLnOqwhCDsuKHsoJUg64GdCglmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKCXsKCQlpZiAoZXJhdG9zdGhlbmVzW2ldICE9IDApIC8vIOyngOybjOyngOyngCDslYrsnYAgZXJhdG9zdGhlbmVzIOyXkCDsoIDsnqXrkJwg7IiY65Ok7J2EIOy2nOugpe2VnOuLpC4gCgkJewoJCQlwcmludGYoIiVkXG4iLCBlcmF0b3N0aGVuZXNbaV0pOwoJCX0KCX0KCXJlc3VsdCA9IChkb3VibGUpKGVuZCAtIHN0YXJ0KTsKCXByaW50ZigiJWxmIiwgcmVzdWx0KTsKCWZyZWUoZXJhdG9zdGhlbmVzKTsKCXJldHVybiAwOwp9