我想写一个代码来自动制作一个包含勾股数的表格(见图)。也就是说,从公式中$a^2 + b^2 = c^2$
,我们可以得到勾股数
我使用了 Mathematica,转换为 TeX,我得到了
Mathematica 的代码是
\left(
\begin{array}{ccc}
3 & 4 & 5 \\
5 & 12 & 13 \\
7 & 24 & 25 \\
8 & 15 & 17 \\
9 & 12 & 15 \\
9 & 40 & 41 \\
11 & 60 & 61 \\
12 & 35 & 37 \\
13 & 84 & 85 \\
15 & 20 & 25 \\
15 & 36 & 39 \\
15 & 112 & 113 \\
16 & 63 & 65 \\
17 & 144 & 145 \\
19 & 180 & 181 \\
20 & 21 & 29 \\
20 & 99 & 101 \\
21 & 28 & 35 \\
21 & 72 & 75 \\
21 & 220 & 221 \\
23 & 264 & 265 \\
24 & 45 & 51 \\
24 & 143 & 145 \\
25 & 60 & 65 \\
27 & 36 & 45 \\
27 & 120 & 123 \\
28 & 45 & 53 \\
28 & 195 & 197 \\
32 & 255 & 257 \\
33 & 44 & 55 \\
33 & 56 & 65 \\
33 & 180 & 183 \\
35 & 84 & 91 \\
35 & 120 & 125 \\
36 & 77 & 85 \\
36 & 105 & 111 \\
39 & 52 & 65 \\
39 & 80 & 89 \\
39 & 252 & 255 \\
40 & 75 & 85 \\
44 & 117 & 125 \\
45 & 60 & 75 \\
45 & 108 & 117 \\
45 & 200 & 205 \\
48 & 55 & 73 \\
48 & 189 & 195 \\
49 & 168 & 175 \\
51 & 68 & 85 \\
51 & 140 & 149 \\
52 & 165 & 173 \\
55 & 132 & 143 \\
55 & 300 & 305 \\
56 & 105 & 119 \\
57 & 76 & 95 \\
57 & 176 & 185 \\
60 & 63 & 87 \\
60 & 91 & 109 \\
60 & 175 & 185 \\
60 & 221 & 229 \\
60 & 297 & 303 \\
63 & 84 & 105 \\
63 & 216 & 225 \\
63 & 280 & 287 \\
65 & 72 & 97 \\
65 & 156 & 169 \\
68 & 285 & 293 \\
69 & 92 & 115 \\
69 & 260 & 269 \\
72 & 135 & 153 \\
75 & 100 & 125 \\
75 & 180 & 195 \\
77 & 264 & 275 \\
81 & 108 & 135 \\
84 & 135 & 159 \\
84 & 187 & 205 \\
84 & 245 & 259 \\
85 & 132 & 157 \\
85 & 204 & 221 \\
87 & 116 & 145 \\
88 & 105 & 137 \\
88 & 165 & 187 \\
93 & 124 & 155 \\
95 & 168 & 193 \\
95 & 228 & 247 \\
96 & 247 & 265 \\
99 & 132 & 165 \\
99 & 168 & 195 \\
100 & 105 & 145 \\
104 & 153 & 185 \\
104 & 195 & 221 \\
105 & 140 & 175 \\
105 & 208 & 233 \\
105 & 252 & 273 \\
108 & 231 & 255 \\
111 & 148 & 185 \\
115 & 252 & 277 \\
115 & 276 & 299 \\
117 & 156 & 195 \\
117 & 240 & 267 \\
119 & 120 & 169 \\
120 & 209 & 241 \\
120 & 225 & 255 \\
123 & 164 & 205 \\
125 & 300 & 325 \\
129 & 172 & 215 \\
133 & 156 & 205 \\
135 & 180 & 225 \\
136 & 255 & 289 \\
136 & 273 & 305 \\
140 & 147 & 203 \\
140 & 171 & 221 \\
140 & 225 & 265 \\
141 & 188 & 235 \\
144 & 165 & 219 \\
147 & 196 & 245 \\
152 & 285 & 323 \\
153 & 204 & 255 \\
159 & 212 & 265 \\
160 & 231 & 281 \\
161 & 240 & 289 \\
165 & 220 & 275 \\
165 & 280 & 325 \\
171 & 228 & 285 \\
175 & 288 & 337 \\
177 & 236 & 295 \\
180 & 189 & 261 \\
180 & 273 & 327 \\
180 & 299 & 349 \\
183 & 244 & 305 \\
189 & 252 & 315 \\
195 & 216 & 291 \\
195 & 260 & 325 \\
201 & 268 & 335 \\
204 & 253 & 325 \\
207 & 224 & 305 \\
207 & 276 & 345 \\
213 & 284 & 355 \\
219 & 292 & 365 \\
220 & 231 & 319 \\
225 & 272 & 353 \\
225 & 300 & 375 \\
240 & 275 & 365 \\
252 & 275 & 373 \\
260 & 273 & 377 \\
6 & 8 & 10 \\
10 & 24 & 26 \\
12 & 16 & 20 \\
14 & 48 & 50 \\
16 & 30 & 34 \\
18 & 24 & 30 \\
18 & 80 & 82 \\
20 & 48 & 52 \\
22 & 120 & 122 \\
24 & 32 & 40 \\
24 & 70 & 74 \\
26 & 168 & 170 \\
28 & 96 & 100 \\
30 & 40 & 50 \\
30 & 72 & 78 \\
30 & 224 & 226 \\
32 & 60 & 68 \\
32 & 126 & 130 \\
34 & 288 & 290 \\
36 & 48 & 60 \\
36 & 160 & 164 \\
40 & 42 & 58 \\
40 & 96 & 104 \\
40 & 198 & 202 \\
42 & 56 & 70 \\
42 & 144 & 150 \\
44 & 240 & 244 \\
48 & 64 & 80 \\
48 & 90 & 102 \\
48 & 140 & 148 \\
48 & 286 & 290 \\
50 & 120 & 130 \\
54 & 72 & 90 \\
54 & 240 & 246 \\
56 & 90 & 106 \\
56 & 192 & 200 \\
60 & 80 & 100 \\
60 & 144 & 156 \\
64 & 120 & 136 \\
64 & 252 & 260 \\
66 & 88 & 110 \\
66 & 112 & 130 \\
70 & 168 & 182 \\
70 & 240 & 250 \\
72 & 96 & 120 \\
72 & 154 & 170 \\
72 & 210 & 222 \\
78 & 104 & 130 \\
78 & 160 & 178 \\
80 & 84 & 116 \\
80 & 150 & 170 \\
80 & 192 & 208 \\
84 & 112 & 140 \\
84 & 288 & 300 \\
88 & 234 & 250 \\
90 & 120 & 150 \\
90 & 216 & 234 \\
96 & 110 & 146 \\
96 & 128 & 160 \\
96 & 180 & 204 \\
96 & 280 & 296 \\
100 & 240 & 260 \\
102 & 136 & 170 \\
102 & 280 & 298 \\
108 & 144 & 180 \\
110 & 264 & 286 \\
112 & 180 & 212 \\
112 & 210 & 238 \\
114 & 152 & 190 \\
120 & 126 & 174 \\
120 & 160 & 200 \\
120 & 182 & 218 \\
120 & 288 & 312 \\
126 & 168 & 210 \\
128 & 240 & 272 \\
130 & 144 & 194 \\
132 & 176 & 220 \\
132 & 224 & 260 \\
138 & 184 & 230 \\
144 & 192 & 240 \\
144 & 270 & 306 \\
150 & 200 & 250 \\
156 & 208 & 260 \\
160 & 168 & 232 \\
160 & 300 & 340 \\
162 & 216 & 270 \\
168 & 224 & 280 \\
168 & 270 & 318 \\
170 & 264 & 314 \\
174 & 232 & 290 \\
176 & 210 & 274 \\
180 & 240 & 300 \\
186 & 248 & 310 \\
192 & 220 & 292 \\
192 & 256 & 320 \\
198 & 264 & 330 \\
200 & 210 & 290 \\
204 & 272 & 340 \\
210 & 280 & 350 \\
216 & 288 & 360 \\
222 & 296 & 370 \\
238 & 240 & 338 \\
240 & 252 & 348 \\
260 & 288 & 388 \\
280 & 294 & 406 \\
\end{array}
\right)
答案1
下面是我生成三元组的尝试(编辑:并且三元组的数量小于):
\documentclass{article}
\usepackage[margin=3cm]{geometry}
\usepackage{xcolor}
\makeatletter
\newcount\coeff@u
\newcount\coeff@v
\newcount\gcd@a
\newcount\gcd@b
\newcount\cnt@triples
\newif\if@count@triples
\newcommand*\countpytha{\pytha@i\@count@triplestrue}
\newcommand*\pytha[1]{%
\par\noindent
\pytha@i\@count@triplesfalse{#1}%
\par
}
\newcommand*\pytha@i[2]{%
\def\pytha@max{#2}\coeff@u\@ne\coeff@v\@ne
\begingroup
#1\fboxsep2pt
\pytha@ii
\endgroup
}
\newcommand*\pytha@ii{%
\ifnum\coeff@v<\coeff@u
\advance\coeff@v\@ne
\else
\coeff@v\@ne
\advance\coeff@u\@ne
\fi
\let\pytha@next\pytha@ii
\ifodd\numexpr\coeff@v-\coeff@u\relax
\edef\num@c{\number\numexpr\coeff@u*\coeff@u+\coeff@v*\coeff@v\relax}%
\ifnum\num@c>\pytha@max\relax
\ifnum\coeff@v<3
\if@count@triples\def\pytha@next{\the\cnt@triples}%
\else
\let\pytha@next\relax
\fi
\fi
\else
\calc@gcd\coeff@u\coeff@v
\ifnum\gcd@b=\@ne
\edef\num@a{\number\numexpr\coeff@u*\coeff@u-\coeff@v*\coeff@v\relax}%
\edef\num@b{\number\numexpr2*\coeff@u*\coeff@v}%
\ifnum\numexpr\num@a*\num@a+\num@b*\num@b-\num@c*\num@c\relax=\z@
\if@count@triples
\advance\cnt@triples\@ne
\else
\colorbox{blue!20}{%
\hbox to\dimexpr(\linewidth-10\fboxsep)/5-1pt{\hss(\min@oftwo\num@a\num@b,\max@oftwo\num@a\num@b,\num@c)\hss}%
}%
\hskip1pt \penalty-50
\fi
\fi
\fi
\fi
\fi
\pytha@next
}
\newcommand\calc@gcd[2]{%
\gcd@a\max@oftwo{#1}{#2}%
\gcd@b\min@oftwo{#1}{#2}%
\calc@gcd@i
}
\newcommand*\calc@gcd@i{%
\edef\gcd@tmp{\number\gcd@a}%
\divide\gcd@a\gcd@b
\edef\gcd@tmp{\number\numexpr\gcd@tmp-\gcd@b*\gcd@a}%
\unless\ifnum\gcd@tmp=\z@
\gcd@a\gcd@b
\gcd@b\gcd@tmp\relax
\expandafter\calc@gcd@i
\fi
}
\newcommand\min@oftwo[2]{\ifnum\numexpr#1-#2\relax<\z@#1\else#2\fi}
\newcommand\max@oftwo[2]{\ifnum\numexpr#1-#2\relax<\z@#2\else#1\fi}
\makeatother
\begin{document}
Here is the \countpytha{1000} triples less than 1000 :
\pytha{1000}
\end{document}
答案2
您甚至可以使用 Mathematica 输出:
\documentclass{article}
\usepackage{xparse,xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\pythtriples}{m}
{
\begin{flushleft}
\setlength{\fboxsep}{0pt} % \colorbox doesn't add to the width
\setlength{\lineskiplimit}{\maxdimen} % all lines are too near
\setlength{\lineskip}{1pt} % it's the default, but makes no harm
% five boxes per line
\dim_set:Nn \l__pyth_width_dim { (\linewidth-4pt)/5 }
% do a mapping on all terms of the input
\clist_map_inline:nn { #1 }
{
\colorbox{blue!20}
{
\strut
% five columns with 1pt separation
\makebox[\l__pyth_width_dim]{$(##1)$}
}
\hspace{1pt plus 0.1pt minus 0.1pt}
}
\end{flushleft}
}
\dim_new:N \l__pyth_width_dim
\ExplSyntaxOff
\begin{document}
Here are some primitive Pythagorean triples:
\pythtriples{
{3,4,5}, {5,12,13}, {7,24,25}, {8,15,17}, {9,12,15}, {9,40,41},
{11,60,61}, {12,35,37}, {13,84,85}, {15,20,25}, {15,36,39},
{15,112,113}, {16,63,65}, {17,144,145}, {19,180,181}, {20,21,29},
{20,99,101}, {21,28,35}, {21,72,75}, {21,220,221}, {23,264,265},
{24,45,51}, {24,143,145}, {25,60,65}, {27,36,45}, {27,120,123},
{28,45,53}, {28,195,197}, {32,255,257}, {33,44,55}, {33,56,65},
{33,180,183}, {35,84,91}, {35,120,125}, {36,77,85}, {36,105,111},
{39,52,65}, {39,80,89}, {39,252,255}, {40,75,85}, {44,117,125},
{45,60,75}, {45,108,117}, {45,200,205}, {48,55,73}, {48,189,195},
{49,168,175}, {51,68,85}, {51,140,149}, {52,165,173}, {55,132,143},
{55,300,305}, {56,105,119}, {57,76,95}, {57,176,185}, {60,63,87},
{60,91,109}, {60,175,185}, {60,221,229}, {60,297,303}, {63,84,105},
{63,216,225}, {63,280,287}, {65,72,97}, {65,156,169}, {68,285,293},
{69,92,115}, {69,260,269}, {72,135,153}, {75,100,125}, {75,180,195},
{77,264,275}, {81,108,135}, {84,135,159}, {84,187,205}, {84,245,259},
{85,132,157}, {85,204,221}, {87,116,145}, {88,105,137}, {88,165,187},
{93,124,155}, {95,168,193}, {95,228,247}, {96,247,265}, {99,132,165},
{99,168,195}, {100,105,145}, {104,153,185}, {104,195,221},
{105,140,175}, {105,208,233}, {105,252,273}, {108,231,255},
{111,148,185}, {115,252,277}, {115,276,299}, {117,156,195},
{117,240,267}, {119,120,169}, {120,209,241}, {120,225,255},
{123,164,205}, {125,300,325}, {129,172,215}, {133,156,205},
{135,180,225}, {136,255,289}, {136,273,305}, {140,147,203},
{140,171,221}, {140,225,265}, {141,188,235}, {144,165,219},
{147,196,245}, {152,285,323}, {153,204,255}, {159,212,265},
{160,231,281}, {161,240,289}, {165,220,275}, {165,280,325},
{171,228,285}, {175,288,337}, {177,236,295}, {180,189,261},
{180,273,327}, {180,299,349}, {183,244,305}, {189,252,315},
{195,216,291}, {195,260,325}, {201,268,335}, {204,253,325},
{207,224,305}, {207,276,345}, {213,284,355}, {219,292,365},
{220,231,319}, {225,272,353}, {225,300,375}, {240,275,365},
{252,275,373}, {260,273,377}
}
Of course, the list is infinite.
\end{document}
人们也可以使用它来进行不同的格式化;只需以合适的方式选择映射函数即可。
答案3
以下示例使用\colorbox
浅灰色背景的方框 ( ) 将三元组置于段落模式。一些巫术确保行正确填充,并且方框\triplesep
在水平和垂直方向上具有相等的距离 ( )。
\documentclass{article}
\usepackage[a4paper, vmargin=0mm]{geometry}
\usepackage{xcolor}
\definecolor{triplebackground}{gray}{.8}
\newdimen\triplewidth
\newlength\triplesep
\setlength{\triplesep}{1pt}
\newenvironment{triples}[1]{%
\par
\setlength{\parindent}{0pt}%
\setlength{\baselineskip}{0pt}%
\setlength{\lineskip}{\triplesep}%
\setlength{\leftskip}{-.5\triplesep plus 1pt}%
\setlength{\rightskip}{-.5\triplesep plus 1pt}%
\setlength{\triplewidth}{%
\dimexpr(\linewidth-\numexpr(#1)-1\relax\triplesep)/(#1)\relax
}%
\newcommand*{\triple}[1]{%
\leavevmode
\hspace*{.5\triplesep}%
\colorbox{triplebackground}{%
\hbox to \dimexpr\triplewidth-2\fboxsep{\hfill$\mathsf{(##1)}$\hfill}%
}%
\kern.5\triplesep
\penalty100 %
\ignorespaces
}%
}{\par}
\begin{document}
\begin{triples}{5}
\triple{3, 4 , 5}
\triple{ 5 , 12 , 13}
\triple{ 7 , 24 , 25}
\triple{ 8 , 15 , 17}
\triple{ 9 , 12 , 15}
\triple{ 9 , 40 , 41}
\triple{11, 60 , 61}
\triple{12, 35 , 37}
\triple{13, 84 , 85}
\triple{15, 20 , 25}
\triple{15, 36 , 39}
\triple{15, 112, 113}
\triple{16, 63 , 65}
\triple{17, 144, 145}
\triple{19, 180, 181}
\triple{20, 21 , 29}
\triple{20, 99 , 101}
\triple{21, 28 , 35}
\triple{21, 72 , 75}
\triple{21, 220, 221}
\triple{23, 264, 265}
\triple{24, 45 , 51}
\triple{24, 143, 145}
\triple{25, 60 , 65}
\triple{27, 36 , 45}
\triple{27, 120, 123}
\triple{28, 45 , 53}
\triple{28, 195, 197}
\triple{32, 255, 257}
\triple{33, 44 , 55}
\triple{33, 56 , 65}
\triple{33, 180, 183}
\triple{35, 84 , 91}
\triple{35, 120, 125}
\triple{36, 77 , 85}
\triple{36, 105, 111}
\triple{39, 52 , 65}
\triple{39, 80 , 89}
\triple{39, 252, 255}
\triple{40, 75 , 85}
\triple{44, 117, 125}
\triple{45, 60 , 75}
\triple{45, 108, 117}
\triple{45, 200, 205}
\triple{48, 55 , 73}
\triple{48, 189, 195}
\triple{49, 168, 175}
\triple{51, 68 , 85}
\triple{51, 140, 149}
\triple{52, 165, 173}
\triple{55, 132, 143}
\triple{55, 300, 305}
\triple{56, 105, 119}
\triple{57, 76 , 95}
\triple{57, 176, 185}
\triple{60, 63 , 87}
\triple{60, 91 , 109}
\triple{60, 175, 185}
\triple{60, 221, 229}
\triple{60, 297, 303}
\triple{63, 84 , 105}
\triple{63, 216, 225}
\triple{63, 280, 287}
\triple{65, 72 , 97}
\triple{65, 156, 169}
\triple{68, 285, 293}
\triple{69, 92 , 115}
\triple{69, 260, 269}
\triple{72, 135, 153}
\triple{75, 100, 125}
\triple{75, 180, 195}
\triple{77, 264, 275}
\triple{81, 108, 135}
\triple{84, 135, 159}
\triple{84, 187, 205}
\triple{84, 245, 259}
\triple{85, 132, 157}
\triple{85, 204, 221}
\triple{87, 116, 145}
\triple{88, 105, 137}
\triple{88, 165, 187}
\triple{93, 124, 155}
\triple{ 95 , 168, 193}
\triple{ 95 , 228, 247}
\triple{ 96 , 247, 265}
\triple{ 99 , 132, 165}
\triple{ 99 , 168, 195}
\triple{100, 105, 145}
\triple{104, 153, 185}
\triple{104, 195, 221}
\triple{105, 140, 175}
\triple{105, 208, 233}
\triple{105, 252, 273}
\triple{108, 231, 255}
\triple{111, 148, 185}
\triple{115, 252, 277}
\triple{115, 276, 299}
\triple{117, 156, 195}
\triple{117, 240, 267}
\triple{119, 120, 169}
\triple{120, 209, 241}
\triple{120, 225, 255}
\triple{123, 164, 205}
\triple{125, 300, 325}
\triple{129, 172, 215}
\triple{133, 156, 205}
\triple{135, 180, 225}
\triple{136, 255, 289}
\triple{136, 273, 305}
\triple{140, 147, 203}
\triple{140, 171, 221}
\triple{140, 225, 265}
\triple{141, 188, 235}
\triple{144, 165, 219}
\triple{147, 196, 245}
\triple{152, 285, 323}
\triple{153, 204, 255}
\triple{159, 212, 265}
\triple{160, 231, 281}
\triple{161, 240, 289}
\triple{165, 220, 275}
\triple{165, 280, 325}
\triple{171, 228, 285}
\triple{175, 288, 337}
\triple{177, 236, 295}
\triple{180, 189, 261}
\triple{180, 273, 327}
\triple{180, 299, 349}
\triple{183, 244, 305}
\triple{189, 252, 315}
\triple{195, 216, 291}
\triple{195, 260, 325}
\triple{201, 268, 335}
\triple{204, 253, 325}
\triple{207, 224, 305}
\triple{207, 276, 345}
\triple{213, 284, 355}
\triple{219, 292, 365}
\triple{220, 231, 319}
\triple{225, 272, 353}
\triple{225, 300, 375}
\triple{240, 275, 365}
\triple{252, 275, 373}
\triple{260, 273, 377}
\triple{ 6 , 8 , 10}
\triple{ 10 , 24 , 26}
\triple{ 12 , 16 , 20}
\triple{ 14 , 48 , 50}
\triple{ 16 , 30 , 34}
\triple{ 18 , 24 , 30}
\triple{ 18 , 80 , 82}
\triple{ 20 , 48 , 52}
\triple{ 22 , 120, 122}
\triple{ 24 , 32 , 40}
\triple{ 24 , 70 , 74}
\triple{ 26 , 168, 170}
\triple{ 28 , 96 , 100}
\triple{ 30 , 40 , 50}
\triple{ 30 , 72 , 78}
\triple{ 30 , 224, 226}
\triple{ 32 , 60 , 68}
\triple{ 32 , 126, 130}
\triple{ 34 , 288, 290}
\triple{ 36 , 48 , 60}
\triple{36, 160, 164}
\triple{40, 42 , 58}
\triple{40, 96 , 104}
\triple{40, 198, 202}
\triple{42, 56 , 70}
\triple{42, 144, 150}
\triple{44, 240, 244}
\triple{48, 64 , 80}
\triple{48, 90 , 102}
\triple{48, 140, 148}
\triple{48, 286, 290}
\triple{50, 120, 130}
\triple{54, 72 , 90}
\triple{54, 240, 246}
\triple{56, 90 , 106}
\triple{56, 192, 200}
\triple{60, 80 , 100}
\triple{60, 144, 156}
\triple{64, 120, 136}
\triple{64, 252, 260}
\triple{66, 88 , 110}
\triple{66, 112, 130}
\triple{70, 168, 182}
\triple{70, 240, 250}
\triple{72, 96 , 120}
\triple{72, 154, 170}
\triple{72, 210, 222}
\triple{78, 104, 130}
\triple{78, 160, 178}
\triple{80, 84 , 116}
\triple{80, 150, 170}
\triple{80, 192, 208}
\triple{84, 112, 140}
\triple{84, 288, 300}
\triple{88, 234, 250}
\triple{90, 120, 150}
\triple{90, 216, 234}
\triple{96, 110, 146}
\triple{96, 128, 160}
\triple{96, 180, 204}
\triple{96, 280, 296}
\triple{100, 240, 260}
\triple{102, 136, 170}
\triple{102, 280, 298}
\triple{108, 144, 180}
\triple{110, 264, 286}
\triple{112, 180, 212}
\triple{112, 210, 238}
\triple{114, 152, 190}
\triple{120, 126, 174}
\triple{120, 160, 200}
\triple{120, 182, 218}
\triple{120, 288, 312}
\triple{126, 168, 210}
\triple{128, 240, 272}
\triple{130, 144, 194}
\triple{132, 176, 220}
\triple{132, 224, 260}
\triple{138, 184, 230}
\triple{144, 192, 240}
\triple{144, 270, 306}
\triple{150, 200, 250}
\triple{156, 208, 260}
\triple{160, 168, 232}
\triple{160, 300, 340}
\triple{162, 216, 270}
\triple{168, 224, 280}
\triple{168, 270, 318}
\triple{170, 264, 314}
\triple{174, 232, 290}
\triple{176, 210, 274}
\triple{180, 240, 300}
\triple{186, 248, 310}
\triple{192, 220, 292}
\triple{192, 256, 320}
\triple{198, 264, 330}
\triple{200, 210, 290}
\triple{204, 272, 340}
\triple{210, 280, 350}
\triple{216, 288, 360}
\triple{222, 296, 370}
\triple{238, 240, 338}
\triple{240, 252, 348}
\triple{260, 288, 388}
\triple{280, 294, 406}
\end{triples}
\end{document}
答案4
本原毕达哥拉斯三元组a^2+b^2=c^2
,a>0
,b>0
, 由以下公式生成:
a=m^2-n^2,b=2mn,c=m^2+n^2,其中m > n > 0 没有共同的因子,且其中一个为偶数。
(这使得(a,b,c)
为b
偶数,因此必然为a
奇数。)
a=2mn,b=m^2-n^2,c=m^2+n^2,其中m > n > 0 没有共同的因子,其中一个为偶数。
(这使得(a,b,c)
为a
偶数,因此必然为b
奇数。)
a
自然地,通过交换和,第一个集合中的每个成员唯一地定义第二个集合中的一个成员b
。
但请注意,这不会立即产生(a,b,c)
具有自然条件的三元组0<a<b
,因此我们可以使用它:
a=min(m^2-n^2,2mn),b=max(m^2-n^2,2mn),m>n>0 均为素数,其中一个为偶数。
下面的代码(纯 TeX,但编译时与 LaTeX 完全相同)简单地生成所有(m,n)
具有相反奇偶性的整数候选对,并消除具有共同因子的整数对(使用\xintGCD
来自鑫鑫科技包裹)。
这将更新排列(a,b,c)
三元组以进行验证a<b
。
注意: 有多种方法可以生成原始勾股数a^2+b^2=c^2
, a>0
, b>0
,而不必检查某些数字是否没有共同因子,可以通过上述参数化或更优雅地使用公式维基百科上的勾股数树a<b
。但是,如果增加了要求,则该页面上介绍的方法将需要进行一些额外的调查。
编辑 2015/08/30\input xint.sty
:我在代码开头添加了,因为我今天意识到 的扩展中出现的一些宏\xintGCD
(自 发布以来1.1
——2014/10/28
唉……)缺少xintgcd.sty
。此错误影响xint
版本1.1
和,1.1a
并将在未来版本中修复。在xintgcd
加载的早期版本中xint
,它现在加载一个名为 的唯一子集xintcore
,因此该子集缺少一些保留下来xint.sty
且未传输的辅助宏。
\input xint.sty % needed with xint 1.1a
\input xintgcd.sty
\newcount\cntn % will hold n
\newcount\cntm % will hold m
\newcount\nbtriples % will count the number of triples generated
\newtoks\Triples
% the \loop .. \repeat of plain tex can not be nested
% we make a clone in order to nest to one level. The \loop of latex
% is a bit different, but not any more nestable than the Plain one.
\def\LOOP #1\REPEAT{\def \BODY {#1}\ITERATE }
\def\ITERATE{\BODY \let \next \ITERATE \else \let \next \relax \fi \next }
% \def\gobble#1{}
% use of \edef etc in \AddNewTriple is a bit sub-optimal, but let's forget about it.
\def\OrderAandB #1,#2,{\ifnum #1>#2 #2, #1,\else #1, #2,\fi }
\def\EuclideFormula {\expandafter\OrderAandB
\the\numexpr\cntm*\cntm-\cntn*\cntn\expandafter,%
\the\numexpr 2*\cntm*\cntn,
\the\numexpr\cntm*\cntm+\cntn*\cntn }
\def\AddNewTriple
{\edef\tmp {, (\EuclideFormula)}%
\advance\nbtriples 1
\Triples\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\Triples\tmp}}
\def\generatetriples #1{%
\Triples{(3, 4, 5)}%
\nbtriples 1
\cntm 3
\LOOP
% M is ODD, N MUST BE EVEN
\cntn 0
\loop
\advance\cntn 2
\ifnum\cntn<\cntm
\ifcase\xintGCD{\cntm}{\cntn}
\or
\AddNewTriple % gcd(m,n)=1, primitive triple
\fi
\repeat
\advance\cntm 1
% M iS EVEN, N MUST BE ODD
\cntn 1
\AddNewTriple
\loop
\advance\cntn 2
\ifnum\cntn<\cntm
\ifcase\xintGCD{\cntm}{\cntn}
\or
\AddNewTriple % gcd(m,n)=1, primitive triple
\fi
\repeat
\advance\cntm 1
%%% \Triples\expandafter{\the\Triples\expandafter\endgraf\gobble }%
\ifnum#1>\cntm
\REPEAT
}
\generatetriples {60}
We have generated \the\nbtriples{} primitive Triples. Here they are:\par
\the\Triples
%%% or \the\Triples, if the \endgraf line above is de-commented-out.
\bye
这是输出的第一页。格式问题已在其他答案中得到解决。