Java 超过期限http://www.spoj.com/problems/PRIME1/,谁能给我一些改进的建议吗?

Java 超过期限http://www.spoj.com/problems/PRIME1/,谁能给我一些改进的建议吗?,java,Java,超过时间限制,有谁能给我一些改进的建议吗? 你好,我也在这里发布我的代码,请看一下,并给出一些建议,以避免超时 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.BitSet; public class PrimeGenerator{ private static final int n=31624; private static BitSet p=new BitSet(n); p

超过时间限制,有谁能给我一些改进的建议吗? 你好,我也在这里发布我的代码,请看一下,并给出一些建议,以避免超时

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.BitSet;

public class PrimeGenerator{
private static final int n=31624;
private static BitSet p=new BitSet(n);
private static BufferedReader getBufferedReader(){return new    BufferedReader(getInputStreamReader());}
private static InputStreamReader getInputStreamReader(){return new InputStreamReader(System.in);}
private static String getStringFromBR(BufferedReader bufferedReader) throws Exception{return bufferedReader.readLine();}
private static String[] splitString(String s){return s.split(" ");}
private static int getInteger(String s){return Integer.parseInt(s);}

public static void main(String args[]) throws Exception {
    findAllPrimes();
    BufferedReader br = getBufferedReader();
    String line = getStringFromBR(br);
    int t = getInteger(line);
    iterateForAllTestCases(br, t);
}

private static void iterateForAllTestCases(BufferedReader br, int t) throws Exception {

    for (int i=0; i<t; i++){
        String line=getStringFromBR(br);
        String a[]=splitString(line);
        long x=getInteger(a[0]);
        long y=getInteger(a[1]);
        printAllPrimes(x,y);
    }
}

private static void printAllPrimes(long x, long y){


        printAllPrimesUtil(x,y);


}

private static void printAllPrimesUtil(long x, long y){

    long i=x;
    long j;
    int flag;

    for( ;i<=y;i++){

        if(i<n){
            if(p.get((int) i)){
                System.out.println(i);
            }
        }

        else{
            flag=0;
            innerLoop:
            for(j=2; (j*j)<i; j++){
                if (flag==1) break innerLoop;

                if(p.get((int) j)){
                    if(i%j==0){
                        flag=1;
                    }

                }
            }

            if(flag==0){
                System.out.println(i);
            }
        }
    }
}


private static void findAllPrimes(){
    p.clear(0);
    p.clear(1);

    for (int i = 2; i <= n; i++){
        p.set(i);
    }

    for(int i=2; (i*i)<=n ;i++){
        if (p.get(i)) {
            for (int j = 2*i; j <= n; j+=i) {
                p.clear(j);
            }
        }
    }

}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.util.BitSet;
公共类素数生成器{
专用静态最终整数n=31624;
私有静态位集p=新位集(n);
私有静态BufferedReader getBufferedReader(){返回新的BufferedReader(getInputStreamReader());}
私有静态InputStreamReader getInputStreamReader(){返回新的InputStreamReader(System.in);}
私有静态字符串getStringFromBR(BufferedReader BufferedReader)引发异常{return BufferedReader.readLine();}
私有静态字符串[]拆分字符串(字符串s){返回s.split(“”;}
私有静态int getInteger(字符串s){return Integer.parseInt(s);}
公共静态void main(字符串args[])引发异常{
findAllPrimes();
BufferedReader br=getBufferedReader();
字符串行=getStringFromBR(br);
int t=getInteger(行);
迭代集合测试用例(br,t);
}
私有静态void iterateForAllTestCases(BufferedReader br,int t)引发异常{

对于(int i=0;i我以前曾在这个问题上取得过成功,我在这里看到了你的想法,这似乎是正确的。要解决TLE问题,我建议:

  • 首先,在
    findAllPrimes()
    的第二个循环中,循环条件不应该是
    i吗