我一直在研究Euler项目问题,该问题是找到10001st素数。我用Java创建了项目,它给了我正确的答案。我忍不住注意到它花了17秒才能找到答案。我对Java还是很陌生,并且希望得到有关如何提高Java程序效率的反馈-目前它是蛮力的。
static boolean isPrime;
static int primeCount;
static int forI = 1;
static int latestPrime;
public static void main(String[] args){
long startTime = System.currentTimeMillis();
while(primeCount < 10001){
isPrime = true;
forI++;
for(int i = forI - 1; i > 1; i--){
//If forI is divisible by another number < forI, it is not prime
if(forI % i == 0){
isPrime = false;
}
}
if(isPrime){
primeCount++;
latestPrime = forI;
}
}
long endTime = System.currentTimeMillis() - startTime;
System.out.println(primeCount+" "+latestPrime);
System.out.println("Time taken: " + endTime / 1000 + " seconds");
}
最佳答案
您将要签出Sieve of Eratosthenes。
基本上,对于每个数字,通过检查每个数字是否小于其平均数来检查其质数,这是非常低效的。
为了方便进行改进,您只需要检查所有小于数字平方根的除数。