#8447: java 逾時


esztfcuhbq (燐月)

學校 : 明新科技大學
編號 : 36833
來源 : [114.41.179.234]
最後登入時間 :
2016-11-04 14:02:26
a007. 判斷質數 | From: [36.235.235.155] | 發表日期 : 2013-12-11 22:09

想請問一下
我是用java的eclipse

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

package hello;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ex1 {

public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
String start;
while(((start=in.readLine()) != null))
{
boolean cha=false;
for(int i=2;i<=Math.sqrt(Integer.parseInt(start));i++)
{
if(Integer.parseInt(start)%i==0) cha=true;
}
if(cha==true) System.out.println("非質數");
else if(Integer.parseInt(start)==0)System.out.println("非質數");
else if(Integer.parseInt(start)==1)System.out.println("非質數");
else if(Integer.parseInt(start)==2)System.out.println("質數");
else if(Integer.parseInt(start)==3)System.out.println("質數");
else System.out.println("質數");
}
}
}
----------------------------------------------------------------
請問為什麼一直出現TLE(6s) (逾時)
我測試的時候 最大的那個數2147483647也只需不到1秒就跑出結果了
1.該怎麼改才行呢?
2.以EOF結尾到底是什麼意思?

 
#8466: Re:java 逾時


tomoyaken14 (歐練)

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

想請問一下
我是用java的eclipse

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

package hello;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ex1 {

public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
String start;
while(((start=in.readLine()) != null))
{
boolean cha=false;
for(int i=2;i<=Math.sqrt(Integer.parseInt(start));i++)
{
if(Integer.parseInt(start)%i==0) cha=true;
}
if(cha==true) System.out.println("非質數");
else if(Integer.parseInt(start)==0)System.out.println("非質數");
else if(Integer.parseInt(start)==1)System.out.println("非質數");
else if(Integer.parseInt(start)==2)System.out.println("質數");
else if(Integer.parseInt(start)==3)System.out.println("質數");
else System.out.println("質數");
}
}
}
----------------------------------------------------------------
請問為什麼一直出現TLE(6s) (逾時)
我測試的時候 最大的那個數2147483647也只需不到1秒就跑出結果了
1.該怎麼改才行呢?
2.以EOF結尾到底是什麼意思?

測資不只一筆資料

光是跑2000000000~2147483647這些數字就會花掉超過六秒了

請考慮更快的演算法 ;) 

 
ZeroJudge Forum