任何一個n^3一定可以表示成n個連續的奇數和。
基本介紹
- 中文名:nocomachns定理
- 套用學科:數學
- 適用領域範圍:計算機
- 適用領域範圍:高等數學
概述,用編程證明nocomachns定理,Pascal,功能代碼,C++/C,
概述
任何一個n^3一定可以表示成n個連續的奇數和。
用編程證明nocomachns定理
Pascal
program nocomachns;
var i,n,a:longint;
begin
write('n=');
readln(n);
a:=(n*(n-1))+1;
write('n*n*n=');
for i:=1 to n-1 do
begin
write(a,'+');a:=a+2;
end;
writeln(a);
readln;
end.
功能代碼
#功能代碼
class Cube
{
#region 2009-08-24 編程題 連續奇數相加
/// <summary>
/// 傳入數據,拼接字元串給提供者列印
/// </summary>
/// <param name="baseNum">三次訪的數字</param>
/// <returns>一串特定格式的字元串</returns>
public static string PrintCube(int baseNum) // 列印部分
{
string[] sb = Cube.GetResult(baseNum).ToString().Split(' ');
string str = string.Empty;
// 以下僅僅是列印
if (sb.Length > 0)
{
for (int i = 0, len = sb.Length; i < len; i++)
{
if (!string.IsNullOrEmpty(sb[i]))
{
string[] m_k = sb[i].Split('/');
int m = int.Parse(m_k[0]);
int k = int.Parse(m_k[1]);
for (int j = 1; j <= m; j++)
{
str += "" + ((2 * j - 1) + k) + "+";
}
str = str.Substring(0, (str.Length - 1)) + " | ";
}
}
}
return str;
}
private static string GetResult(int baseNum) // 循環調用部分
{
/*
* 原始公式:N^3 = m1 + m2 + m3 + ... + mn ( n:輸入自然數; m1, m2, m3:連續奇數)
* 簡化公式:N^3 = (1 + 3 + ... + 2(M-1)) + Mk (n, m, k 均為自然數)
*
* 假設:這只是一個假設,假設連續相加數列個數不會長過baseNum的數字
*/
int N = baseNum * baseNum * baseNum; // 三次方數字。
int M = baseNum; // 連續奇數的個數。
int k = 0; // 共有因數
int flag = N / 2;// k 循環的次數
StringBuilder sb = new StringBuilder(); // 存儲信息,這裡假設組合的可能不止一個。
for (int i = 1; i <= M; i++)
{
for (k = 1; k <= flag; k++)
{
if (Cube.ArithmeticProgression(i) + (k * i) == N) // 等式相等的條件
{
if (k % 2 == 0) // 提取的差值只能是偶數,不是奇數。
{
sb.Append(string.Format("{0}/{1} ", i, k));
}
}
}
}
return sb.ToString();
}
// 1開始的等差數列公式
private static int ArithmeticProgression(int length) // 等差為2的和
{
int n = length;
return (n * (1 + (2 * n - 1))) / 2;
}
#endregion
}
# 測試代碼:
class Program
{
static void Main(string[] args)
{
for (int i = 1; i < 20; i++)
{
Console.WriteLine(string.Format("{0}^3 = {1}", i, Cube.PrintCube(i)));
}
Console.ReadKey(true);
}
}
C++/C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int m,n,i;
int k;
printf("Input a num:");
scanf("%d",&m);
if(m==0)
{
printf("Input a error num\n");
return -1;
}
n=m*m;
k=m/2;
printf("%d*%d*%d=",m,m,m);
if(n%2)
{
for(i=k;i>0;i--)
printf("%d+",n-2*i);
printf("%d",n);
for(i=1;i<=k;i++)
printf("+%d",n+2*i);
}
else
{
for(i=k;i>0;i--)
{
if(i==1)
printf("%d",n-2*i+1);
else
printf("%d+",n-2*i+1);
}
for(i=1;i<=k;i++)
printf("+%d",n+2*i-1);
}
printf("\n");
return 0;
}