Во-первых, если вычислять числа последовательно или почти последовательно (т.е. если количество чисел, обрабатываемых последовательно одним выч. узлом, сильно меньше, чем сами числа), то при переходе от n на n+m (где m сильно меньше n) корень легко пересчитывается: единичка либо прибавляется, либо нет :)
Во-вторых, в качестве альтернативы можно сравнивать p<=sqrt(n), а можно p*p<=n, и тут тоже можно придумать всякие оптимизации… ;)
Под линуксом можно использовать Émaçs, в котором, используя разные Input Method, можно вводить самые рáзные символы. А есть ещё nxml-móde, где можно вставить любой юникодный символ по имени (с completion). Мне хватает :)
В функции factorial, приведённой в качестве примера хвостовой рекурсии, рекурсия вовсе не хвостовая. Конечно, хорошо, что LLVM умеет преобразовывать такую рекурсию в цикл (если это действительно так), но получается, что LLVM может оптимизировать не только хвостовую рекурсию, но и другие частные случаи общей рекурсии.
Предлагалось использовать подобное решение для борьбы с почтовым спамом (hashcash). Но большого распространения эта идея не получила.
В случае сайта вся ситуация под контролем, вполне может сработать.
Во-вторых, в качестве альтернативы можно сравнивать p<=sqrt(n), а можно p*p<=n, и тут тоже можно придумать всякие оптимизации… ;)
Код не смотрел, но есть такая вещь, как презумпция вменяемости авторов jQuery :)
Скажу сразу, что в jQuery тоже нельзя использовать чужой GPL-код, т.к. иначе библиотека сразу становится GPL-only.
В случае сайта вся ситуация под контролем, вполне может сработать.