100までの整数から素数を列挙せよ(LaTeX編)


\documentclass{jarticle}
\newif\ifprime \newif\ifunknown
\newcount\p \newcount\d \newcount\a
\def\primes#1{2,~3%
    \p=5
    \loop\ifnum\p<#1 \printifprime\advance\p by2 \repeat}
\def\printifprime{\testprimality \ifprime, \number\p\fi}
\def\testprimality{{\d=3 \global\primetrue
    \loop\trialdivision \ifunknown\advance\d by2 \repeat}}
\def\trialdivision{\a=\p \divide\a by\d
    \ifnum\a>\d \unknowntrue\else\unknownfalse\fi
    \multiply\a by\d
    \ifnum\a=\p \global\primefalse\unknownfalse\fi}
\begin{document}
マクロを定義して「\verb|\primes{100}|」とすれば、「\primes{100}」となります。
\end{document}

これはクヌース『TeX ブック』のp.294に載っているマクロを改変したものです。

ちなみに、このページの『109,   113』は『109, and 113』の間違いです(日本語訳第2版第1刷。原書は大丈夫だということをすぐに確かめたい向きは、CTANにあるTeXbookのソースを見てください)。

これがLLかどうかはわかりませんが、ドキュメントにそのまま挿入できるので便利です(嘘)。

キミならどう書く 2.0 – ROUND 1 –