所以我会称自己为一个相当新手的程序员,因为我在学校里主要专注于硬件,而不是很多计算机科学课程。
于是我解决了 Project Euler 的问题 7:
通过列出前六个素数:2、3、5、7、11 和 13,我们可以看到第 6 个素数是 13。
第10001个质数是多少?
我设法在 Java 中毫无问题地解决了这个问题,但是当我运行我的解决方案时,它需要 8 秒并更改几秒钟才能运行。我想知道如何从编程的角度而不是数学的角度来优化它。
数组循环和 while 语句是消耗处理时间的主要因素吗?以及如何优化?再次不要寻找一个花哨的数学方程..在解决方案线程中有很多。
SPOILER下面列出了我的解决方案。
public class PrimeNumberList {
private ArrayList<BigInteger> primesList = new ArrayList<BigInteger>();
public void fillList(int numberOfPrimes) {
primesList.add(new BigInteger("2"));
primesList.add(new BigInteger("3"));
while (primesList.size() < numberOfPrimes){
getNextPrime();
}
}
private void getNextPrime() {
BigInteger lastPrime = primesList.get(primesList.size()-1);
BigInteger currentTestNumber = lastPrime;
BigInteger modulusResult;
boolean prime = false;
while(!prime){
prime = true;
currentTestNumber = currentTestNumber.add(new BigInteger("2"));
for (BigInteger bi : primesList){
modulusResult = currentTestNumber.mod(bi);
if (modulusResult.equals(BigInteger.ZERO)){
prime = false;
break;
}
}
if(prime){
primesList.add(currentTestNumber);
}
}
}
public BigInteger get(int primeTerm) {
return primesList.get(primeTerm - 1);
}
}