Так что я бы назвал себя довольно начинающим программистом, так как я сосредоточился в основном на оборудовании в моей школе, а не на многих курсах компьютерных наук.
Итак, я решил проблему 7 в Project Euler:
Перечисляя первые шесть простых чисел: 2, 3, 5, 7, 11 и 13, мы можем видеть, что шестое простое число равно 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);
}
}