Это занимает менее 1 мс.
шение:
Оказывается, в самом коде нет (вероятно) «ничего плохого»; это просто неэффективно. Если моя математика верна, если я оставлю ее включенной, это будет сделано к пятнице, 14 октября 2011 года. Я дам вам знать!
Предупреждение: это может содержать спойлеры, если вы пытаетесь решить проект Euler # 3.
Проблема говорит это:
Основными факторами 13195 являются 5, 7, 13 и 29.
Что является самым большим основным фактором числа 600851475143?
Вот моя попытка ее решить. Я только начинаю с Java и программирования в целом, и я знаю, что это не самое хорошее и эффективное решение.
import java.util.ArrayList;
public class Improved {
public static void main(String[] args) {
long number = 600851475143L;
// long number = 13195L;
long check = number - 1;
boolean prime = true;
ArrayList<Number> allPrimes = new ArrayList<Number>();
do {
for (long i = check - 1; i > 2; i--) {
if (check % i == 0) {
prime = false;
}
}
if (prime == true && number % check == 0) {
allPrimes.add(check);
}
prime = true;
check--;
} while (check > 2);
System.out.println(allPrimes);
}
}
когдаnumber
установлен в13195, программа работает просто отлично, дает результат[29, 13, 7, 5] как это должно.
Почему это не работает для больших значенийnumber
?
Тесно связаны (но не обманывать):Сообщение об ошибке «Слишком большое целое число» для 600851475143