Как я могу получить этот код R, чтобы пройти "1 минута" тест для этого проекта Эйлера вопрос?


Я пытаюсь изучать программирование на языке R, пройдя через вопросы в проект Эйлера.

Код ниже-это мое решение задачи 5 в которой просит наименьшее число, которое делится на 1 до 20.

Код работает, но занимает очень много времени. Проект Эйлера утверждает, что все их проблемы должен взять современный компьютер < 1 минуты.

Я знаю, что R-это не так эффективно, как другие языки, но можно ли сделать мое решение эффективнее?

divis <- function(){
  count = 11
  tst <- 1:20 %% count # create vector of remainders
  while(sum(tst) != 0){ # test if all remainders are 0
    count <- count + 1
    tst <- count %% 1:20
    print(count)
    print(tst)
    }
  }
}


257
4
задан 8 августа 2011 в 02:08 Источник Поделиться
Комментарии
1 ответ

Вы должны изменить алгоритм для того, чтобы сделать вашу программу работать быстрее. Цикл while выполняется более 200 миллионов раз (распечатка информации на каждой итерации), пока не достигнет нужного количества.

Если подсчитать ответ, используя НОК (принимать наименьшее общее кратное всех чисел между 1 и 20), программа должна выполняться мгновенно практически на любом языке программирования.

4
ответ дан 8 августа 2011 в 08:08 Источник Поделиться