尼科马库斯定理
根据尼科马库斯定理,前n个整数的立方和等于第n个三角数的平方。
或者,我们也可以说:
前n个自然数的立方和等于前n个自然数之和的平方。
用代数式表示:
$$\mathrm{\displaystyle\sum\limits_{i=0}^n i^3=\lgroup \frac{n^2+n}{2}\rgroup^2}$$
定理
$$1^3 = 1$$
$$2^3 = 3 + 5$$
$$3^3 = 7 + 9 + 11$$
$$4^3 = 13 + 15 + 17 + 19\vdots$$
推广
$$n^3 =\lgroup n^2−n+1\rgroup+\lgroup n^2−n+3\rgroup+⋯+\lgroup n^2+n−1\rgroup$$
数学归纳法证明
对于所有n ∈ 自然数,设P(n) 为命题:
$$n^3 =\lgroup n^2−n+1\rgroup+\lgroup n^2−n+3\rgroup+⋯+\lgroup n^2+n−1\rgroup$$
归纳基础
$$\mathrm{P\lgroup 1\rgroup\: 为真,因为这只是说\: 1^{3}= 1}$$
归纳假设
现在我们需要证明,如果P(k) 为真,其中k≥1,那么逻辑上可以得出
$$\mathrm{P\lgroup k+1\rgroup 为真。}$$
所以这是我们的归纳假设
$$k^3=\lgroup k^2−k+1\rgroup+\lgroup k^2−k+3\rgroup+⋯+ \lgroup k^2+k−1\rgroup$$
然后我们需要证明:
$$\mathrm{\lgroup k+1\rgroup^{3}=\lgroup\lgroup k+1\rgroup^{2}- \lgroup k+1\rgroup+1\rgroup+\lgroup\lgroup k+1\rgroup{2}- \lgroup k+1\rgroup+3\rgroup+\dotso+\lgroup\lgroup k+1\rgroup ^{2}+\lgroup k+1\rgroup-1\rgroup}$$
归纳步骤
$$\mathrm{设 \:T_{k}=\lgroup k^{2}−k+1\rgroup+\lgroup k^{2}−k+3\rgroup+⋯+ \lgroup k^{2}+k−1\rgroup.}$$
我们可以将其表示为:
$$\mathrm{T_{k}=\lgroup k^{2}−k+1\rgroup+\lgroup k^{2}−k+3\rgroup+⋯+\lgroup k^{2}-k+2k−1\rgroup.}$$
我们看到Tk中有K项。
让我们考虑Tk+1中的一般项((k+1)2−(k+1)+j):
$$\mathrm{\lgroup k+1\rgroup^{2}−\lgroup k+1\rgroup+j=k^{2}+2k+1− \lgroup k+1\rgroup+j}$$
$$\mathrm{=k^{2}+j+2k}$$
因此,在Tk+1中,每一项都比T_k中对应的项大2k。
$$\mathrm{T^{k}+1= T^{k} +k\lgroup 2k\rgroup+ \lgroup k+1\rgroup^{2}+\lgroup k+1\rgroup−1}$$
$$\mathrm{= k^{3}+k\lgroup 2k\rgroup+\lgroup k+1\rgroup^{2}+\lgroup k+1\rgroup−1}$$
$$\mathrm{= k^3+2k^2+k^2+2k+1+k+1−1}$$
$$\mathrm{= k^3+3k^2+3k+1}$$
$$\mathrm{= \lgroup k+1\rgroup^3}$$
$$\mathrm{所以\: P\lgroup k\rgroup \Rightarrow P\lgroup k+1\rgroup}$$
根据数学归纳法原理,结果成立。
因此
$$\mathrm{n^3 =\lgroup n^2−n+1\rgroup+\lgroup n^2−n+3\rgroup+⋯+\lgroup n^2+n−1\rgroup}$$
问题陈述
给定一个数字n,验证n的尼科马库斯定理。如果定理成立,则打印“Yes”,否则打印“No”。
方法
为了验证尼科马库斯定理,我们将首先计算立方和。然后我们将计算自然数之和。之后,我们将比较立方和与自然数之和的平方。
示例
$$\mathrm{对于\: n = 5} $$
$$\mathrm{立方和\colon 1^3 + 2^3 + 3^3 + 4^3 + 5^3 = 225}$$
$$\mathrm{自然数和\colon 1 + 2 + 3 + 4 + 5 = 15}$$
解决方案
为了计算自然数之和,我们将使用我们已经知道的公式,即:
$$\mathrm{前N个自然数之和= n*\lgroup n+1\rgroup/2.}$$
我们称之为 **自然数和**。
为了计算立方和,我们将从一个值为0的变量开始。然后迭代所有自然数,计算它们的立方并将这些值添加到变量中,我们称之为 **立方和**。
然后我们将计算出的 **立方和** 与 **自然数和** 的平方进行比较。如果它们相等,则尼科马库斯定理将得到验证。
伪代码
Start sumOfCubes = 0; For 1=< k <= n sumOfCubes = sumOfCubes + k^3; sumOfNatural= n * (n + 1) / 2; If (sumOfNatural)^2 is equal to sumOfCubes Then print Yes Else Print No End
示例1
下面是一个验证尼科马库斯定理的C++程序:
#include <bits/stdc++.h> using namespace std; // Function to calculate the sum of cubes and to find the sum of natural numbers and then comparing them void verifyTheorem(int n){ // Initializing sum as 0 int sumOfCubes = 0; // Iterating through natural numbers and adding their cubes to sum for (int k = 1; k <= n; k++){ sumOfCubes += k * k * k; } // Check if sum is equal to given formula. Calculating the sum of natural numbers using the formula int naturalSum = n * (n + 1) / 2; // Comparing square of naturalSum to sumOfCubes if (sumOfCubes == naturalSum * naturalSum) { // Printing Yes if they are equal cout << "Yes"; } else { // Printing No if they are not equal cout << "No"; } } int main(){ // Given value of n int n = 6; // Function call to verify theorem verifyTheorem(n); return 0; }
输出
对于输入:i = 6,上面的C++程序将产生以下输出:
Yes
示例2
我们可以通过将verify函数分成多个函数来更清晰地编写上面的代码。
// Cpp program that verifies Nicomachus' Theorem #include <bits/stdc++.h> using namespace std; // Function to return the sum of cubes of numbers from 1 to n int calcsumOfCubes(int n){ // Initializing sum as 0 int sumOfCubes = 0; // Iterating through natural numbers and adding their cubes to sum for (int k = 1; k <= n; k++) { sumOfCubes += k * k * k; } return sumOfCubes; } // Calculating the sum of natural numbers using the formula int calnaturalSum(int n){ return n * (n + 1) / 2; } // Function to calculate the sum of cubes and to find the sum of natural numbersand then comparing them void verifyTheorem(int n){ // Function call to calculate sum of cubes int sumOfCubes = calcsumOfCubes(n); // Function call to calculate sum of natural numbers int naturalSum = calnaturalSum(n); // Comparing square of naturalSum to sumOfCubes if (sumOfCubes == naturalSum * naturalSum){ // Printing Yes if they are equal cout << "Yes"; } else { // Printing No if they are not equal cout << "No"; } } int main() { // Given value of n int n = 6; // Function call to verify theorem verifyTheorem(n); return 0; }
输出
对于输入i = 6,上面的C++程序将产生以下输出:
Yes
在这篇文章中,我们学习了尼科马库斯定理并对其进行了验证。