Size: a a a

Сrystal Lang — русскоговорящее сообщество

2021 October 14

АК

Андрей Коновод... in Сrystal Lang — русскоговорящее сообщество
ты можешь спокойно писать его как standalone приложение, а при деплое поставить за нгинксом чтобы не гонять через него статику.
источник

D

Den in Сrystal Lang — русскоговорящее сообщество
при деплое ты и ограничен самим standalone приложением, максимум что можно сделать - поменять порты, а как дело доходит до кастомизации и редактирования - хух что сделаешь, поэтому это и запиливается как пачка скриптов на сервере
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Как вам такое предусловие для is_prime? (насчёт >1000)

def is_prime(n : Int64) : Bool
   r : Int64
   i : Int64
   return false if n & 1 == 0 || n == 5 || (n > 1000 && n.to_s[-1] == '5')

   r = (n**0.5).to_i64
   i = 3
   while i <= r
     return false if n % i == 0
     i += 2
   end
   true
end
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Я что-то подумал, для случаев <1000 преобразование в строку дороговато выйдет
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Легче так поделить (там же дальше всё равно деление по модулю будет)
источник

АК

Андрей Коновод... in Сrystal Lang — русскоговорящее сообщество
да, в строку как-то стремно. хотя это и позволило бы еще несколько признаков делимости использовать  но я думаю не стоит того.
источник

АК

Андрей Коновод... in Сrystal Lang — русскоговорящее сообщество
и квадратный корень для целых чисел же и так теперь есть
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Вообще интересно, какие ещё есть проверки, чтобы заранее определить, что число не простое...
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
О, а это как? В Math?
источник

АК

Андрей Коновод... in Сrystal Lang — русскоговорящее сообщество
ну судя по чейнджлогу. сам не смотрел
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Забавно было бы сделать Trie по битам заранее вычисленных простых чисел: типа в такой позиции у тебя бит == 1? Иди вот на ту ветку дерева. Но наверное это будет весьма медленно. А так-то высыпать в память эти простые числа заранее - элементарно.
Но, кстати, и заранее скомпилировать всё дерево Trie для них тоже нетрудно, вот только переходы по указателям - тот ещё гемор
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Мы такие: меньше ли оно максимального из заранее вычисленных простых чисел? О, да оно меньше! Смотрим. по Trie, не простое ли оно.
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Вот записывать в Trie не нужно, иначе мы не сможем легко определять, имеет ли смысл вообще ползать по дереву для данного числа
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Сумма цифр в числе кратна 3-м - значит, делится на 3  🙂
источник

АК

Андрей Коновод... in Сrystal Lang — русскоговорящее сообщество
и на 11 еще есть
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Можно не по trie, а просто хеш, хотя я ХЗ, не люблю хеши
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
На 11 меньше смысла, на 3 ведь делится каждое 3-е число 🙂
Но вообще to_s тот ещё гемор, хотя у Intel есть asm-инструкции для распаковки байт в decimal
источник

AK

Andrey Konovalov in Сrystal Lang — русскоговорящее сообщество
Объективно быстрый алгоритм хеширования для данного конкретного случая и массив предвычисленных простых чисел рулит в данной ситуации. Нет смысла вычислять то, что итак известно
источник

BZ

Bulat Ziganshin in Сrystal Lang — русскоговорящее сообщество
вместо написанного в скобках достаточно n%10==5 или просто n%5==0. корень - довольно дорогая операция
источник

BZ

Bulat Ziganshin in Сrystal Lang — русскоговорящее сообщество
это какие? aaa и прочих нет в x64, и выполняются они медленно
источник