#4898: 一直tle(3s)


alex15964 (AlexLin)

學校 : 國立嘉義大學
編號 : 14970
來源 : [163.29.100.241]
最後登入時間 :
2019-07-08 14:57:06
a007. 判斷質數 | From: [140.129.108.218] | 發表日期 : 2011-02-21 20:59

import java.util.*;
public class Java{
 public static void main(String [] args){
  Scanner cin=new Scanner(System.in);
  while(cin.hasNext()){
   int x=cin.nextInt();
   if(x<2||x>2147483647){
    continue;
   }
   if(x%2==0){
    System.out.println("非質數");
   }else{
    for(int i=3;i*i<x;i=i+2){
     if(x%i==0){
      System.out.println("非質數");
      break;
     }else if((i+2)*(i+2)>x){
      System.out.println("質數");
      break;
     }
    }
    break;
   }
  }
 }
}

先判斷是否為偶數或尾數為0或5,是的話直接非質數,再來只用奇數去找,並且用次方減少判斷次數,可是還是一直tle(3s),請問能給點建議嗎?謝謝。

 
#4982: Re:一直tle(3s)


eee9513571 (問天)

學校 : 康寧大學
編號 : 18107
來源 : [180.217.233.208]
最後登入時間 :
2018-11-13 12:07:36
a007. 判斷質數 | From: [210.71.118.253] | 發表日期 : 2011-03-18 11:31

首先是
 if(x%2==0){
    System.out.println("非質數");
2是質數,令x=2,2%2=0,會印出非質數。建議改成if(x%2==0 && x!=2){
的條件,再加上else if(x==2){System.out.println("質數");}
然後是
for(int i=3;i*i<x;i=i+2)
如果令x=25,當i=5時,i*i=25一樣不小於25
建議改成for(int i=3;i*i<=x;i=i+2)
 
ZeroJudge Forum