Как я могу заставить это решение Project Euler выполняться на Python с той же скоростью, что и Java?

Прежде чем кто-либо начнет, я знаю, что разговоры о «скорости» в языке программирования - не всегда самое ... полезное обсуждение. Тем не менее, проблема здесь в скорости.

Я рассмотрел задачу 5 проекта Эйлера на обоих языках, и, хотя мои реализации на обоих языках кажутся мне довольно похожими, время выполнения сильно отличается. Java возвращает ответ всего за несколько секунд, тогда как Python может занять до минуты (конечно, на той же машине).Я совершенно уверен, что в этом виноват не столько Python, сколько программист (я), который еще не научился мыслить на языке Python.

Обратите внимание, что я не прошу вас переписывать мой код . Я просто ищу несколько толчков в правильном направлении. (И да, я просмотрел несколько похожих потоков , но большинство из них мне не подходят и напрямую не сравнивают один и тот же алгоритм на двух языках. Этот поток полезен, но, опять же, напрямую не сравнивает Java и Python - и, честно говоря, ответить на этот вопрос немного сложно.)

Без лишних слов:

Java

public class Problem5 {

    public static void main(String[] args){
        boolean found = false;

        for (int i = 20; !found; i += 20){
            if (DivisThrough20(i)) {
                found = true;
                System.out.println(i);
            }
        }
    }

    private static boolean DivisThrough20(int number){
        boolean result = true;
        for (int i = 19; result && i > 1; i--){
            if (number % i != 0) result = false;
        }
        return result;
    }
}

Python

def DivisThroughTwenty(number):
    for x in range(20,1,-1):
        if number % x != 0:
            return False
    return True

# the number we're looking for can't be any lower than 20, so we'll
# start there as a small optimization
testNumber = 20

keepLooking = True

while keepLooking:
    if not DivisThroughTwenty(testNumber):
        testNumber += 20
    else:
        keepLooking = False

print testNumber

Это забавно читая их рядом, я уже вижу, что версия этого алгоритма для Python немного более оптимизирована, чем версия для Java, но все же намного медленнее. Мне еще более любопытно сейчас найти другой способ подойти к проблеме.

7
задан Community 23 May 2017 в 10:34
поделиться