#7920: c#TLE


hulkxbox (哈哈)

學校 : 不指定學校
編號 : 33495
來源 : [114.24.66.229]
最後登入時間 :
2018-09-28 14:17:18
a007. 判斷質數 | From: [219.85.165.134] | 發表日期 : 2013-07-06 22:05

 請問有哪裡還可以改進的嗎??
 
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
    int b,c,i;

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



        for (c=2;c<=sqrt(b);c++)
         {
            if (b%c==0)
            break;
         }

        if (c<=b/2) printf("非質數\n");
        else printf("質數\n");
    }



return 0;
}

 
#7928: Re:c#TLE


tomoyaken14 (歐練)

學校 : 不指定學校
編號 : 6922
來源 : [122.117.127.202]
最後登入時間 :
2024-04-15 14:31:55
a007. 判斷質數 | From: [140.117.70.46] | 發表日期 : 2013-07-09 11:17

 請問有哪裡還可以改進的嗎??
 
 
#include
#include
#include
int main ()
{
    int b,c,i;

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



        for (c=2;c<=sqrt(b);c++)
         {
            if (b%c==0)
            break;
         }

        if (c<=b/2) printf("非質數\n");
        else printf("質數\n");
    }



return 0;
}


C#?
 
#7929: Re:c#TLE


akira0331 (小迷糊)

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

 請問有哪裡還可以改進的嗎??
#include
#include
#include
int main ()
{
    int b,c,i;

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



        for (c=2;c<=sqrt(b);c++)
         {
            if (b%c==0)
            break;
         }

        if (c<=b/2) printf("非質數\n");
        else printf("質數\n");
    }



return 0;
}


以我的做法,一般的質數判斷,我會先判斷輸入是否偶數,偶數裡只有2是質數其它的都不是

如果是奇數就從3開始跑,每次+2做判斷

但是其題修改過之後,這種每輸入一次跑一迴圈的方法已經行不通了

需要先建質數表,簡單的說就是先找出2~2147483647的質因數

學會建質數表之後UVa的質數問題都能解了

 
ZeroJudge Forum