#9907: (C語言) 這題一直逾時怎麼辦?


kujeng (FindaDelta)


scanf前面那段至少跑了6秒鐘啊!!

 

#include <stdio.h>

#include <math.h>

void odd_or_not(int);

int main(){

int test,i,k,j;

int a[43641]={0};

a[0]=2;

a[1]=3;

a[2]=5;

a[3]=7;

for(i=3;i<43641;i++){

j=1;

for(k=0;k<=i;k++){

if((a[i]+j)%a[k]==0){

j++;

k=0;

continue;

}

else{

a[i+1]=a[i]+j;

}

}

}

/*printf("Done!\n");*/

/*for(i=0;i<43641;i++) printf(" %d",a[i]);*/

while(scanf("%d",&test)!=EOF){

for(i=0;i<43641;i++){

if(test%a[i]==0){ 

printf("非質數\n");

break;

}

else if(i==43640 && test%a[i]!=0){

printf("質數\n");

break;

}

}

}

}

 

 

 

#9918: Re:(C語言) 這題一直逾時怎麼辦?


p3a_owhj (阿普二信)


看演算法筆記內的篩法或6n+1法加快求質數的速度

http://www.csie.ntnu.edu.tw/~u91029/Prime.html 

#9972: Re:(C語言) 這題一直逾時怎麼辦?


jenny0529 (jenny chou)


看演算法筆記內的篩法或6n+1法加快求質數的速度

http://www.csie.ntnu.edu.tw/~u91029/Prime.html 

 



以下是我最近解這題的程式碼,提供給大家參考,有問題可以留言給我,一起討論

 

http://joujounote.blogspot.tw/2015/07/blog-post.html#more

目前利用建質數表可以解這題

如果有人有更快的方法希望也可以分享一下XD