Новое состояние в неограниченном поколении последовательности Хемминга

(это захватывающе!) Я знаю, предмет хорошо известен. Уровень техники (в Хаскеле и других языках) для эффективной генерации неограниченной возрастающей последовательности чисел Хэмминга, без дубликатов и без пропусков, долгое время был следующим (AFAIK - и, кстати, он эквивалентеноригинальный код Edsger Dijkstra тоже):

hamm :: [Integer]
hamm = 1 : map (2*) hamm `union` map (3*) hamm `union` map (5*) hamm
  where
    union a@(x:xs) b@(y:ys) = case compare x y of
        LT -> x : union  xs  b
        EQ -> x : union  xs  ys
        GT -> y : union  a   ys

Я задаю вопрос:can you find the way to make it more efficient в какой-либо значительной мере? Это все еще современное состояние или действительно возможно улучшить это, чтобы запуститьtwice faster и с лучшимиэмпирические порядки роста Загружать?

Если ваш ответyesПожалуйста, покажите код и обсудите его скорость и эмпирические порядки роста по сравнению с вышеупомянутым~ n^1.05 .. n^1.10 за первые несколько сотен тысяч произведенных номеров). Также, если он существует, может ли этот эффективный алгоритм быть расширен до получения последовательности гладких чисел с любым заданным набором простых чисел?

Ответы на вопрос(6)

Ваш ответ на вопрос