#include 
#include 
void move(int *arr,int i,int size)
{
    while(i
    {
        *(arr+i)=*(arr+i+1);
        i++;
    }
}
int delete(int *arr,int n)
{
    int temp=n;
    for(int i=0;i
    {
        if(*(arr+i)<0){
            move(arr,i,n);
            n--;
        }
    }
    return n;
}
int isprime(int a)
{
    for(int i=2;i*i
        if(a%i==0)
        return 0;
    }
    return a;
}
int main(void)
{
    int n,m,*prime,i,j,k,size,temp;
    scanf("%d %d",&n,&m);
    prime=(int *)malloc(sizeof(int)*(m/2));
    size=m/2-1;
    for(i=0;i
    {
        *(prime+i)=3+2*i;
    }
    for(i=0;i
    {
        temp=size;
        if(isprime(*(prime+i)))
        {
            for(j=i+1;j//삭제를 위한 루프
            {
                if((*(prime+j))%(*(prime+i))==0){
                    *(prime+j)=-1;
                }
                size=delete(prime,size);
            }
        }
    }
    if(n==2||n==1)
    printf("2\n");
    for(i=0;i1;i++){
        if(*(prime+i)>=n)
            printf("%d\n",*(prime+i));
    }
    free(prime);
    return 0;
}

코드를 이렇게 짯는데 아리스토 텔레스의 체를 떠올리며 짰어

그런데 그냥 숫자 하나하나로 소수인지 판단하는 거 보다 훨씬 더 시간이 많이 걸리는데 왜 그런거야?

대충 원인 생각해 봤는데 저기 삭제함수에서 while써서 그런거야?? 아니면 malloc함수가 원인인거야???