我不想显示模数符号,我想以编程方式计算 n 模 3 并显示结果。
答案1
您还可以\intcalcMod
使用计算包裹:
\documentclass{article}
\usepackage{amsmath}
\usepackage{ifthen}
\usepackage{intcalc}
\newcounter{mycount}
\newcommand\Nmodiii[1]{%
\setcounter{mycount}{0}\whiledo{\value{mycount}<#1}
{$\themycount\pmod 3=\intcalcMod{\value{mycount}}{3}$\\\stepcounter{mycount}}
}
\begin{document}
\noindent A little example: $8\pmod 3=\intcalcMod{8}{3}$
\noindent And a little loop:\\
\Nmodiii{20}
\end{document}
评论中发布的链接中出现的代码有一些虚假的空白,导致第一行出现不必要的缩进;这里是更正后的版本:
\documentclass{article}
\usepackage{ifthen}
\usepackage{forloop}
\usepackage{fmtcount}
\usepackage{intcalc}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\newcounter{i}
\noindent\forloop{i}{1}{\value{i} < 101}{%
\ifthenelse{\equal{\intcalcMod{\value{i}}{15}}{0}}{
FizzBuzz
}{%
\ifthenelse{\equal{\intcalcMod{\value{i}}{3}}{0}}{
Fizz
}{%
\ifthenelse{\equal{\intcalcMod{\value{i}}{5}}{0}}{
Buzz
}{%
\thei
}
}
}\\
}
\end{multicols}
\end{document}
答案2
有几个使用不同软件包的不错的答案。我想指出的是,TeX 使用整数算术,因此很容易编写标准公式 a-(a/b)*b,其中 / 表示整数除法。
普通 TeX 解决方案:
\newcount\tmpcnta
\def\modulo#1#2{\tmpcnta=#1
\divide\tmpcnta by #2
\multiply\tmpcnta by #2
\multiply\tmpcnta by -1
\advance\tmpcnta by #1\relax
\the\tmpcnta}
\modulo{17}{3}
\modulo{19}{3}
\bye
LaTeX 解决方案:
\documentclass{article}
\makeatletter
\newcommand\modulo[2]{\@tempcnta=#1
\divide\@tempcnta by #2
\multiply\@tempcnta by #2
\multiply\@tempcnta by -1
\advance\@tempcnta by #1\relax
\the\@tempcnta}
\makeatother
\begin{document}
\modulo{17}{3}
\modulo{19}{3}
\end{document}
答案3
“可扩展”版本,使用 e-TeX 的\numexpr
:
\def\truncdiv#1#2{((#1-(#2-1)/2)/#2)}
\def\moduloop#1#2{(#1-\truncdiv{#1}{#2}*#2)}
\def\modulo#1#2{\number\numexpr\moduloop{#1}{#2}\relax}
\truncdiv
并且\moduloop
可以插入到其他表达式中。这样做是必要的,因为\numexpr
执行圆形整数除法。
答案4
LaTeX3(该expl3
包)也具有计算模量(模量?)的工具,即\int_mod:nn
。
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand{\mymod}[2]{\int_mod:nn{#1}{#2}}
\ExplSyntaxOff
\begin{document}
The residue of $45$ modulo $19$ is $\mymod{45}{19}$.
\end{document}