#7913: 這...我只能求救了@@


tcfsh910993 (Akito-senior)

學校 : 國立臺中第一高級中學
編號 : 14969
來源 : [114.43.212.110]
最後登入時間 :
2023-09-19 16:28:37
a007. 判斷質數 | From: [121.254.116.18] | 發表日期 : 2013-07-05 02:11

建質數表建到46341(2147483647的根號

然後去除這個質數表的質數判斷

這樣結果還TLE

那該怎麼辦呢

ps.程式碼附上

#include<stdio.h>

#include<stdlib.h>

#include<math.h> 

#define N 46441

main()

{

      int a[N];

      int p[10000];/*改變n的時候這裡也要跟著改*/ 

      int con;

      int p_con=2;

      long int con_2;

      int n;

      int jud;

      int i;

      for(con=3,i=0;con<=N;con++)

      {

                             a[con]=i;

                             i=(i+1)%2;

      }

      a[1]=1;

      a[2]=0;

      p[1]=2;

                               for(con=3;con<=sqrt(N);con++)

                               {

                                                         if(a[con]==0)

                                                         {

                                                                      p[p_con]=con;

                                                                      p_con++;

                                                                     for(con_2=con*con;con_2<=N;con_2=con_2+con*2)

                                                                     {

                                                                                                                    a[con_2]=1;

                                                                     }

                                                         }

                               }

                               for(;con<=N;con++)

                               {

                                                 if(a[con]==0)

                                                 {

                                                              p[p_con]=con;

                                                              p_con++;

                                                 }

                               }

 

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

      {

                                jud=0;

                                for(con=1;p[con]<=sqrt(n)&&jud==0;con++)

                                {

                                                                        if(n%p[con]==0)

                                                                        jud++;

                                }

                                if(jud==0&&n!=1)

                                printf("質數\n");

                                else

                                printf("非質數\n");

      }

      return 0;

ps.把這個程式碼的質數改成0,非質數改成1,再加個終止條件,可以1.1s過d705 

 
#7930: Re:這...我只能求救了@@


akira0331 (小迷糊)

學校 : 不指定學校
編號 : 26613
來源 : [203.70.194.240]
最後登入時間 :
2013-07-29 09:30:29
a007. 判斷質數 | From: [221.178.132.211] | 發表日期 : 2013-07-09 12:03

你可以參考演算法筆記 -Prime
http://www.csie.ntnu.edu.tw/~u91029/Prime.html
 
ZeroJudge Forum