2016-09-15 3 views
0

Я только начал изучать Groovy, и я пытаюсь запустить цикл for с ограничением очень большого числа (600851475143, если быть точным). Каждый цикл я печатаю текущий номер.Groovy - работа с большими номерами

Проблема заключается в том, что после выполнения кода, GroovyConsole и некоторых программ, которые запускаются на моем компьютере, застряли. Я знаю, это потому, что во время выполнения скрипта Groovy используется много баранов.

Вот заводной сценарий:

BigInteger num = 600851475143 
def max = 0 
for(BigInteger i = 1; i < num; i++) { 
    println i; 
} 

println "Largest Prime: $max" 

Мой вопрос есть ли способ, чтобы оптимизировать этот код так, чтобы он не застревают или аварии?

+1

Очевидно, что консоль переполнена. поэтому, если вы удалите 'println' из цикла, он должен потреблять меньше памяти – injecteer

ответ

2

Вместо запуска в Groovy консоли, попробуйте запустить из командной строки:

$ groovy -e ' 
BigInteger num = 600851475143 
def max = 0 
for(BigInteger i = 1; i < num; i++) { 
    println i; 
} 

println "Largest Prime: $max"' 

Теперь, однако, у вас есть еще одна проблема. Предположим, что вы можете распечатать десять тысяч номеров в секунду (разумное приближение моих результатов на моем Mac), тогда, чтобы распечатать шестьсот миллиардов номеров, вам понадобится шестьдесят миллионов секунд ... что составляет почти два года.

Возможно, сначала вы должны попробовать несколько меньшее число.

Смежные вопросы