#7393: TLE應該是大家最主要的問題吧...能幫我看看怎麼解決嗎


ooxx6513 (fish)

學校 : 輔仁大學
編號 : 30025
來源 : [111.241.148.161]
最後登入時間 :
2019-09-27 15:23:53
a121. 質數又來囉 | From: [114.44.178.143] | 發表日期 : 2013-01-12 16:39

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void){
    int a,b,i,j;
    while(scanf("%d %d",&a,&b)!=EOF){
        int m=0;
        if(a==1 || a==2){
            a++;
            m++;
            if(b==1)
                m--;
        }
        if(a%2==0)
            a++;
        for(i=a;i<=b;i=i+2){
            int temp=0;
            for(j=1;j<=sqrt(i);j++){
                if(i%j==0)
                    temp++;
            }
            if(temp==1){
                m++;
            }
        }
        printf("%d\n",m);
    }
}
 
#7395: Re:TLE應該是大家最主要的問題吧...能幫我看看怎麼解決嗎


akira0331 (小迷糊)

學校 : 不指定學校
編號 : 26613
來源 : [203.70.194.240]
最後登入時間 :
2013-07-29 09:30:29
a121. 質數又來囉 | From: [203.70.194.240] | 發表日期 : 2013-01-15 10:07

#include
#include
#include
int main(void){
    int a,b,i,j;
    while(scanf("%d %d",&a,&b)!=EOF){
        int m=0;
        if(a==1 || a==2){
            a++;
            m++;
            if(b==1)
                m--;
        }
        if(a%2==0)
            a++;
        for(i=a;i<=b;i=i+2){
            int temp=0;
            for(j=1;j<=sqrt(i);j++){
                if(i%j==0)
                    temp++;
            }
            if(temp==1){
                m++;
            }
        }
        printf("%d\n",m);
    }
}


給你幾建議,用2個for迴圈太耗時了,改用一個應該就能過

另外找質數的for迴圈裡,1 不是質數所以不用掃,另外偶數裡除了2是質數,其它的都不是

只做奇數是不是又更快了

 
ZeroJudge Forum