#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)
{
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함수가 원인인거야???
해당 댓글은 삭제되었습니다.
젠장
에라토스테네스의 채 아니냐
아리스토 테네스 씨인가 그분이 만든거 소수가 아닌거만 체크해서 제외 시키는건데 속도 ㅈㄴ게 빠를텐데
내가 대충 봤는데O(n^4)코드네 미친거냐?
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ