#5095: 判斷質數出現(記憶體區段錯誤)


ray57diary79 (無)

學校 : 不指定學校
編號 : 18790
來源 : [114.32.244.119]
最後登入時間 :
2011-07-09 06:24:19
a007. 判斷質數 | From: [114.32.242.12] | 發表日期 : 2011-05-03 14:52

#include<stdio.h>

#define MAXSIZE 50000

int main(void)
{
  unsigned long m=0,n,i,j,k,t=0;
  unsigned long arr[MAXSIZE];
  int is_prime=0;
 
  while(scanf("%ld",&n)==1) {
                          
    if(n==2 || n==3) printf("質數\n");
    else if(n%2==0 || n%3==0) printf("非質數\n");
    else {
     
     if(n-m>1)
      for(i=t,j=2*i+5;j*j<=n;i++,j+=2)
        arr[i]=1;
     
      is_prime=1;
      for(i=0,j=5;j*j<=n && is_prime;j+=2,i++) {
        if(arr[i]!=-1) {
         
          if(n-m>1)
           for(k=i+j;k*k<=n;k+=j)
            arr[k]=-1;
          
           if(n%j==0) {
             printf("非質數\n");
             is_prime=0;
           }        
        }                            
      }
      m=n;
      t=i;      
    }   
   
    if(is_prime) {
       printf("質數\n");
       is_prime=0;
    }                          
  } 
 
 
    return 0;
}

不知道哪裡有問題,幫忙指教一下!

 
ZeroJudge Forum