In 1796, Gauss discovered that every positive integer is representable as a sum of three triangular numbers (possibly including T 0 = 0), writing in his diary his famous words, "ΕΥΡΗΚΑ! num = Δ + Δ + Δ".
1796 年,高斯发现每个正整数都可以表示为三个三角形数的和(可能包括 T0 = 0),并在他的日记中写下了他的名言“ΕΥΡΗΚΑ!num = Δ + Δ + Δ”。
This is a special case of the Fermat polygonal number theorem. In additive number theory, the Fermat polygonal number theorem states that every positive integer is a sum of at most n n-gonal numbers. That is, every positive integer can be written as the sum of three or fewer triangular numbers, and as the sum of four or fewer square numbers, and as the sum of five or fewer pentagonal numbers, and so on. That is, the n -gonal numbers form an additive basis of order n .
这是费马多边形数定理的一个特例。 在加法数论中,费马多边形数定理指出,每个正整数都是最多 n 个 n 边形数的和。 也就是说,每个正整数都可以写成三个或更少的三角形数之和,也可以写成四个或更少的平方数之和,以及五个或更少的五边形数之和,等等。 也就是说,n 边形数形成 n 阶的加法基础。
我用Javascript语言和nodejs运行环境,写了一小段代码,基本上只用了for循环语句,用于生成小于MAXS的自然数的三个三角形数分解形式表。
//生成小于MAX的自然数的三个三角形数分解形式表.
//node sum-3-triangular-numbers.js > 3-tris-sum.csv
const MAX=25, MAXS=MAX*(MAX+1)/2;
let T=[],arr=[],sum=0;
for (let i = 0; i <= MAX; i++) {
let tri=i*(i+1)/2;
T.push(tri);
}
for (let i = 0; i <= MAXS; i++) {
arr.push([i,'','','']);
}
console.log(`n, 'one-tri', 'two-tris', 'three-tris'`);
for (let a = 1; a <= MAX; a++) {
arr[T[a]][1]=a;
for(let b = 1,sum=T[a]+T[b]; b <= a && sum<=MAXS; b++,sum=T[a]+T[b]) {
arr[sum][2]+=`${a} ${b}|`;
for(let c = 1,sum=T[a]+T[b]+T[c]; c <= b && sum<=MAXS; c++,sum=T[a]+T[b]+T[c]) {
arr[sum][3]+=`${a} ${b} ${c}|`;
}
}
}
//require('util').inspect.defaultOptions.maxArrayLength = MAXS+1;
arr.forEach(element => {
console.log(`${element[0]}, '${element[1]}', '${element[2]}', '${element[3]}'`)
});
n, 'one-tri', 'two-tris', 'three-tris'
0, '', '', ''
1, '1', '', ''
2, '', '1 1|', ''
3, '2', '', '1 1 1|'
4, '', '2 1|', ''
5, '', '', '2 1 1|'
6, '3', '2 2|', ''
7, '', '3 1|', '2 2 1|'
8, '', '', '3 1 1|'
9, '', '3 2|', '2 2 2|'
10, '4', '', '3 2 1|'
11, '', '4 1|', ''
12, '', '3 3|', '3 2 2|4 1 1|'
13, '', '4 2|', '3 3 1|'
14, '', '', '4 2 1|'
15, '5', '', '3 3 2|'
输出的前几行如上。