我一直在研究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

基本上,对于每个数字,通过检查每个数字是否小于其平均数来检查其质数,这是非常低效的。

为了方便进行改进,您只需要检查所有小于数字平方根的除数。

07-24 09:37