三角平方数的算法生成
三角平方数的相关数学定义
三角数的定义:
f
(
n
)
=
∑
i
=
0
n
i
=
n
(
n
+
1
)
2
f(n)=\sum_{i=0}^n i = \frac{n(n+1)}{2}
f(n)=i=0∑ni=2n(n+1)
平方数的定义:
f
(
n
)
=
n
2
f(n)=n^2
f(n)=n2
三角平方数的定义:
f
(
n
)
=
i
n
2
⋅
j
n
2
f(n)=i_n^2 \cdot j_n^2
f(n)=in2⋅jn2
其中
i
1
=
1
,
j
1
=
1
;
i
n
=
i
n
−
1
+
j
n
−
1
,
j
n
=
2
⋅
i
n
−
1
+
j
n
−
1
;
且
g
c
d
(
i
n
,
j
n
)
=
1
,
i_1 = 1, j_1 = 1; i_n=i_{n-1}+j_{n-1}, j_n=2 \cdot i_{n-1} + j_{n-1};且gcd(i_n,j_n)=1,
i1=1,j1=1;in=in−1+jn−1,jn=2⋅in−1+jn−1;且gcd(in,jn)=1,
∣
2
⋅
i
n
−
j
n
∣
=
1
|2 \cdot i_n-j_n|=1
∣2⋅in−jn∣=1
C++代码实现
#include <iostream>
#include <iomanip>
using std::cout; using std::endl;
using std::setw;
int main()
{
const int N = 12; // N超过13时,使用内置数据类型计算时数据就会溢出
long long trianglSqr[N];
for (unsinged i = 0, j = 1, k = 1; i < N; ++i)
{
trianglSqr[i] = (long long)(j) * j * k * k; // 计算时强制把j转换为64位,防止溢出
j += k;
k = 2 * j - k;
}
cout << "前" << N << "个三角平方数:" << endl;
for (int i = 0; i < N; ++i)
{
switch ((i + 1) % 4)
{
case 0:
cout << setw(17) << trianglSqr[i] << endl;
break;
default:
cout << setw(17) << trianglSqr[i] << " ";
break;
}
}
system("pause");
return 0;
}