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吗