0
이 알고리즘은 Eratosthenes의 체를 사용하여 최대 소수 div를 계산합니다. x를 1000000000 롤 이상으로 계산하려면 7kk 킬로바이트가 필요합니다.최대 소수 div를 계산하는 알고리즘을 최적화
몇 가지 조언 내가 어떻게 최적화 할 수 있습니까? 덕분에 .
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, p, i, q, max, min;
scanf ("%d", &x);
int *a = (int*)malloc((abs(x)+1) * sizeof(int));
for (i=0; i<=abs(x); i++)
a[i] = i;
a[1]=0;
for (p=2; p<=abs(x); p++){
for (q=p*2; q<=abs(x); q+=p)
a[q]=0;
}
max=0;
if (x>=0){
for(i=0; i<=abs(x); i++)
if((a[i]!=0) && (abs(x)%a[i]==0))
if (a[i]>max)
max=a[i];
printf("%d", max);
free(a);
}
else{
min=abs(x);
for(i=0; i<=abs(x); i++)
if((a[i]!=0) && (abs(x)%a[i]==0))
if (a[i]<min)
min=a[i];
printf ("%d", -min);
free(a);
}
}
은 얼마입니까 (같은 전체 체 만 SQRT (X)에 계산되지 않음)을 할 것입니까? 7 기가 바이트를 의미합니까? 7 메가 바이트? 아니면 단지 7 킬로바이트입니까? –
큰 차이는 아니지만,'scanf' 바로 다음에'x = abs (x);를 사용하고'abs'에 대한 모든 후속 호출을 제거 할 수 있습니다. –
7331840KB, x = 1874657754 –