#7690: 怎麼做才能增快速度?


max8783890 (HelloWorld)


我已經盡力了 不知道還能改善什麼

每次出來都是TLE

-------------------------------------------

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int i,j,c;

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

    {

    

        for(i=2; i<=j ;i++)

        {

            

            if(j%i == 0)

            {

               c++;

            }

        }

        if(c == 1)

        {

             printf("質數"); 

        }

        else

        {

             printf("非質數"); 

        }

         c =0;                   

                        

    }

    return 0;

    

}

 

#7691: Re:怎麼做才能增快速度?


akira0331 (小迷糊)


我已經盡力了 不知道還能改善什麼

每次出來都是TLE

-------------------------------------------

#include

#include

int main()

{

    int i,j,c;

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

    {

 

        for(i=2; i<=j ;i++)

        {

 

            if(j%i == 0)

            {

               c++;

            }

        }

        if(c == 1)

        {

             printf("質數"); 

        }

        else

        {

             printf("非質數"); 

        }

         c =0;                   

 

    }

    return 0;

 

}

 


將迴圈改寫 for(i=2; i<=sqrt(j) ;i++), 跑迴圈的次數會少很多

後面程式的寫法也有些問題要修改,我的做法是當j%i==0就 break 不要再跑迴圈,

因為可以被某數整除就不是質數

要先排除 1, 2, 3 ,1不是質數, 2, 3是質數

#7693: Re:怎麼做才能增快速度?


max8783890 (HelloWorld)


我已經盡力了 不知道還能改善什麼

每次出來都是TLE

-------------------------------------------

#include

#include

int main()

{

    int i,j,c;

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

    {

 

        for(i=2; i<=j ;i++)

        {

 

            if(j%i == 0)

            {

               c++;

            }

        }

        if(c == 1)

        {

             printf("質數"); 

        }

        else

        {

             printf("非質數"); 

        }

         c =0;                   

 

    }

    return 0;

 

}

 


將迴圈改寫 for(i=2; i<=sqrt(j) ;i++), 跑迴圈的次數會少很多

後面程式的寫法也有些問題要修改,我的做法是當j%i==0就 break 不要再跑迴圈,

因為可以被某數整除就不是質數

要先排除 1, 2, 3 ,1不是質數, 2, 3是質數 

j%i==0 要 這樣嗎 if(j%i==0&&j!=i) break;?

還有就是 為什麼要取j的平方根?~ 

#7705: Re:怎麼做才能增快速度?


akira0331 (小迷糊)


我已經盡力了 不知道還能改善什麼

每次出來都是TLE

-------------------------------------------

#include

#include

int main()

{

    int i,j,c;

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

    {

 

        for(i=2; i<=j ;i++)

        {

 

            if(j%i == 0)

            {

               c++;

            }

        }

        if(c == 1)

        {

             printf("質數"); 

        }

        else

        {

             printf("非質數"); 

        }

         c =0;                   

 

    }

    return 0;

 

}

 


將迴圈改寫 for(i=2; i<=sqrt(j) ;i++), 跑迴圈的次數會少很多

後面程式的寫法也有些問題要修改,我的做法是當j%i==0就 break 不要再跑迴圈,

因為可以被某數整除就不是質數

要先排除 1, 2, 3 ,1不是質數, 2, 3是質數 

j%i==0 要 這樣嗎 if(j%i==0&&j!=i) break;?

還有就是 為什麼要取j的平方根?~ 

 

只要寫 if(j%i==0) break; 就行了,因 i的迴圈只做到<=sqrt(j)而以,所以j!=i。
用sqrt(j)是判斷質數常用的方法之一,有人會用 j/2,但sqrt(j)<=j/2,可以少了一些不必要的迴圈數