주어진 N (N < 4294967295) 아래의 소수를 인쇄하는 아래의 C 프로그램을 실행했습니다. SunOS에서 실행될 때 괜찮 았지만 우분투에서 실행될 때 (코어 덤프 된) 세그먼트 오류가 발생했습니다 (gcc 컴파일러로 컴파일 됨). 아무도 내가 잘못 된 곳을 알려주시겠습니까? SunOS의의 컴파일러 버전 아래에 언급 된 우분투 12.10우분투의 C 프로그램에서 런타임 오류가 발생했습니다. 하지만 잘 실행 SunOS
cc -V
참조 : 일 C 5.9 SunOS_sparc 패치 124867-01 2007년 7월 12일
gcc -v
내장 사양을 사용. COLLECT_GCC = gcc가 COLLECT_LTO_WRAPPER =는/usr/lib 디렉토리/GCC/x86_64에-리눅스 GNU/4.7/LTO-래퍼에게 대상 : x86_64에-리눅스 GNU 가 함께 구성 : ../src/configure -v --with-pkgversion = 'Ubuntu/Linaro 4.7.2-2ubuntu1'--with-bugurl = file : ///usr/share/doc/gcc-4.7/README.Bugs --enable-languages = c, C++, go, fortran, objc , - obj-C++ --prefix =/usr - 프로그램 접미사 = -4.7 - 사용 가능 공유 - 사용 가능 링커 빌드 ID --with-system-zlib --libexecdir =/usr/lib --without -libdir =/usr/lib --enable-nls --with-sysroot =/--included-gettext --enable-threads = posix --with-gxx-include-dir =/usr/include/C++/-enable-clocale = gnu - 사용 가능 libstdcxx-debug - 사용 가능 libstdcxx-time = 예 - 사용 가능 -gnu-unique-object - 사용 가능 플러그인 - 사용 가능 -objc-gc - 사용 불가 -werror - with-arch-32 = i686 --with-tune = 일반 - 사용 가능 확인 = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu,363,210 스레드 모델 : POSIX 버전의 gcc 4.7.2 (우분투/리나 4.7.2-2ubuntu1)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<inttypes.h>
int main()
{
FILE *fpin,*fpout;
char ch[11], file_name[100];
long long int num1=0,i,tmp=0;
long long int *arr;
printf("enter file name:: ");
gets(file_name);
fpin = fopen(file_name,"r");
fpout = fopen("/home/code/output.c","w");
while(1)
{
fgets(ch,11,fpin);
if (!feof(fpin))
{
num1=atoll(ch);
arr = prime_number(num1);
for(i=0;*(arr+i)!='\0';i++)
{
fprintf(fpout,"%llu",*(arr+i));
if(*(arr+i+1) == '\0')
fputc('.',fpout);
else
fputc(',',fpout);
}
}
else
{
fclose(fpin);
fclose(fpout);
break;
}
}
}
prime_number(long long int n)
{
long long int i,j,total=0,a[200];
int count=0;
printf("\n%llu \n",n);
for (j=2;j<=n;j++)
{
count = 0;
for (i=1;i<=j;i++)
{`enter code here`
if ((j%i) == 0)
count++;
if (count > 2)
break;
}
if (count==2)
{
a[total] = j;
total++;
}
}
return(&a[0]);
}
로컬 변수의 주소를 반환하는 것 외에도'a [200]'은 중요하지 않은 범위에 소수를 저장하는 데 약간 작습니다. 그리고 당신의 프라임 테스트는 비효율적입니다. (세 번째 디바이더를 발견하자 마자 당신이 쉬기는하지만 좋은 시작입니다.) 제곱근 만 나누면 합성 숫자의 최소 제수는 제곱근을 초과 할 수 없습니다. –
안녕하세요 @ 대니얼 피셔가 제안대로 시도했지만 실행 시간이 반으로 줄어 들었습니다. 감사합니다 –