请输入您要查询的百科知识:

 

词条 nocomachns定理
释义

概述

任何一个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\");

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("\");

return 0;

}

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/11/16 7:49:02