#2097: 質數 [TLE]


way6114 (HABA)

學校 : 不指定學校
編號 : 7061
來源 : [118.160.185.39]
最後登入時間 :
2019-11-03 20:09:18
a007. 判斷質數 | From: [125.226.130.100] | 發表日期 : 2009-06-24 16:55

#include <iostream>
using std::cin;
using std::cout;

int main(){
   int x;
   while(cin >> x && 2<=x && x<=2147483647){
      int count = 0;
      if (x == 2) cout << "質數\n";  2 是質數
      else if (x%2 == 0) cout << "非質數\n";  偶數是非質數
      else{
         for (int i=3; i*i<=x; i+=2) if (x%i == 0) count++;  個人想法 i*i<=x 應該等於開根號吧
         if (count == 0) cout << "質數\n";
         else cout << "非質數\n";
      }
   }
   return 0;
}

不了解怎麼會 TLE 呢 ... 可以請各位幫幫忙解疑嗎 ^^ ?

 
#2098: Re:質數 [TLE]


way6114 (HABA)

學校 : 不指定學校
編號 : 7061
來源 : [118.160.185.39]
最後登入時間 :
2019-11-03 20:09:18
a007. 判斷質數 | From: [125.226.130.100] | 發表日期 : 2009-06-24 17:07

#include <iostream>
using std::cin;
using std::cout;

#include <math.h>
using namespace std;

int main(){
   int x;
   while(cin >> x && 2<=x && x<=2147483647){
      int run = sqrt(x);
      int count = 0;
      if (x == 2) cout << "質數\n";
      else if (x%2 == 0) cout << "非質數\n";
      else{
         for (int i=3; i<=run; i+=2) if (x%i == 0) count++;
         if (count == 0) cout << "質數\n";
         else cout << "非質數\n";
      }
   }
   return 0;
}

 這是修改後的 code , 看來原因是出在開根號的位置吧 ?

一個在輸入之後就開根號 ( 也就是決定好 loop 次數 )

一個是在 loop 裡作條件判斷 ( 也就是每次執行 loop 都要檢查條件是否符合 )

以上是小弟的想法 , 希望能給大家或指正

 

 
#2100: Re:質數 [TLE]


su_horng (su_horng)

學校 : 劍橋大學國王學院
編號 : 1089
來源 : [111.248.42.147]
最後登入時間 :
2014-12-13 21:15:21
a007. 判斷質數 | From: [220.137.70.117] | 發表日期 : 2009-06-25 20:04

#include
using std::cin;
using std::cout;

int main(){
   int x;
   while(cin >> x && 2<=x && x<=2147483647){
      int count = 0;
      if (x == 2) cout << "質數\n";  2 是質數
      else if (x%2 == 0) cout << "非質數\n";  偶數是非質數
      else{
         for (int i=3; i*i<=x; i+=2) if (x%i == 0) count++;  個人想法 i*i<=x 應該等於開根號吧
         if (count == 0) cout << "質數\n";
         else cout << "非質數\n";
      }
   }
   return 0;
}

不了解怎麼會 TLE 呢 ... 可以請各位幫幫忙解疑嗎 ^^ ?

小心 i 跑一跑會溢位變成負數 ~

題外話,不需要整個 sqrt(x) 都跑完,只要找到因數就可以 break;
 
#2101: Re:質數 [TLE]


su_horng (su_horng)

學校 : 劍橋大學國王學院
編號 : 1089
來源 : [111.248.42.147]
最後登入時間 :
2014-12-13 21:15:21
a007. 判斷質數 | From: [220.137.70.117] | 發表日期 : 2009-06-25 20:04

#include
using std::cin;
using std::cout;

int main(){
   int x;
   while(cin >> x && 2<=x && x<=2147483647){
      int count = 0;
      if (x == 2) cout << "質數\n";  2 是質數
      else if (x%2 == 0) cout << "非質數\n";  偶數是非質數
      else{
         for (int i=3; i*i<=x; i+=2) if (x%i == 0) count++;  個人想法 i*i<=x 應該等於開根號吧
         if (count == 0) cout << "質數\n";
         else cout << "非質數\n";
      }
   }
   return 0;
}

不了解怎麼會 TLE 呢 ... 可以請各位幫幫忙解疑嗎 ^^ ?

小心 i 跑一跑會溢位變成負數 ~

題外話,不需要整個 sqrt(x) 都跑完,只要找到因數就可以 break;
 
ZeroJudge Forum