#4898: 一直tle(3s)


alex15964 (AlexLin)


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 (問天)


首先是
 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)