词条 | nocomachns定理 |
释义 | 概述任何一个n^3一定可以表示成n个连续的奇数和。 用编程证明nocomachns定理Pascalprogram 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。