Я делаю вопрос 12 эйлера проекта, где должен найти первый номер треугольника с 501 делителями. Поэтому я взломал это с помощью Haskell:Функция Haskell, занимающая много времени для обработки
divS n = [ x | x <- [1..(n)], n `rem` x == 0 ]
tri n = (n* (n+1)) `div` 2
divL n = length (divS (tri n))
answer = [ x | x <- [100..] , 501 == (divL x)]
Первая функция находит делители числа.
Вторая функция вычисляет п-й номер треугольника
3-я функция находит длину списка, которые являются делителями треугольника числа
4-функция должна возвращать значение числа треугольника, который имеет 501 делителей.
Но пока это работает некоторое время, не возвращая результата. Является ли ответ очень большим или мне нужна какая-то серьезная оптимизация, чтобы сделать эту работу в реалистичное время?
В общем, это хорошая эвристика в таких задачах, чтобы посмотреть на основные коэффициенты чисел, которые вы получаете - 501 = 3 * 167 –