【C语言训练】尼科彻斯定理

题目描述
验证尼科彻斯定理,即:任何一个正整数的立方都可以写成一串连续奇数的和。

输入
任一正整数

输出
该数的立方分解为一串连续奇数的和

样例输入
13
样例输出
13*13*13=2197=157+159+161+163+165+167+169+171+173+175+177+179+181
提示
本题是一个定理,我们先来证明它是成立的。

对于任一正整数a,不论a是奇数还是偶数,整数(a×a-a+1)必然为奇数。

构造一个等差数列,数列的首项为(a×a-a+1),等差数列的差值为2(奇数数列),则前a项的和为:

a×((a×a-a+1))+2×a(a-1)/2

=a×a×a-a×a+a+a×a-a

=a×a×a

定理成立。证毕。

通过定理的证明过程可知L所要求的奇数数列的首项为(a×a-a+1),长度为a。编程的算法不需要特殊设计,
可按照定理的证明过直接进行验证。*/
#include<iostream>
using namespace std;

int main()
{
unsigned long long a,i,c;
cin>>a;
if(a>0)
{
unsigned long long b[a];
b[0]=a*a-a+1;
for(i=1;i<a;i++)
{
b[i]=b[i-1]+2;
}
c=a*a*a;
cout<<a<<"*"<<a<<"*"<<a<<"="<<c<<"=";
for(i=0;i<a;i++)
{
cout<<b[i];
if(i<a-1)cout<<"+";
else cout<<endl;
}
}
return 0;
}

时间: 2024-10-13 00:58:03

【C语言训练】尼科彻斯定理的相关文章

例30:尼科彻斯定理

尼科彻斯定理简单来想其实可以是这样,我们假设有一个数N,则他的立方为N*N*N,可以看成为N个N*N在相加,此时若N为奇数,那么则有从N*N-(N-1)/2*2,即为N*N-N+1开始到N*N+N-1为止的奇数相加的值,同样,若为偶数可得出相应的结论从N*N-1-(N/2-1)*2,即为N*N-N+1到N*N+N-1为止. 这和书上的不太一样,但书上的用的好像是穷举的方法,这样算的话,应该比书上的方法要快得多了.明白了这个道理,那么直接开始编程就可以了. 代码如下: 1 #include<std

华为OJ平台——尼科彻斯定理

题目描述: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 输入 输入一个int整数 输出 输出分解后的string 样例输入 6 样例输出 31+33+35+37+39+41 思路: 由例子1~4给出的结论猜测  n3 = (n*(n-1)+1) + (n*(n-1)+2 +1) + ... + (n*(n+1)-2 + 1 )(共n项,等差数列,差为2) 而又等差数列的性质知:

2015华为机试——尼科彻斯定理

题目描述: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和.m属于[1,100],超出范围则报错. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 解题思路:不难发现展开式从(n*n - n + 1)开始,步进2显示,共显示n个数. 代码如下: public static void main(String[] args) { Scanner sc=new Scanner(System.in); while (sc.hasNext()

验证尼科彻斯定理

1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main(){ 6 8 //验证尼科彻斯定理:任何一个大于 2 的整数的立方都可以表示成一串连续奇数的和,这些奇数一定是要连续的(比如 3 ^ 3 == 7 + 9 + 11). 9 10 //用户输入某个整数,验证该数是否符合尼科彻斯定理,并将对应的式子打印出来. 11 int n, i, j; 12 int n

尼科彻斯定理

import java.util.Scanner; public class NicoChester { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = scan.nextInt(); checkNicoChester(num); } private static void checkNicoChester(int num) { int []result = new

【华为OJ】【049-尼科彻斯定理】

[华为OJ][算法总篇章] [华为OJ][049-尼科彻斯定理] [工程下载] 题目描述 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 接口说明 原型: /* * 功能: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. * 原型: * int getSequeOddNum(int m); * 输入参数: * int m:整数(取值范围:1-100) * *

《喀秋莎》词作者伊萨科夫斯基

<喀秋莎>词作者伊萨科夫斯基老家的文化馆里,开了一家"<喀秋莎>博物馆",里面保存着世界各地,用不同语言翻译和出版的<喀秋莎>歌篇http://www.ximalaya.com/zhubo/27347791/ http://www.ximalaya.com/zhubo/27347801/ http://www.ximalaya.com/zhubo/27347808/ http://www.ximalaya.com/zhubo/27347811/ ht

Hpuoj1039--【C语言训练】角谷猜想

1039: [C语言训练]角谷猜想 时间限制: 1 Sec  内存限制: 128 MB提交: 2  解决: 2[提交][状态][讨论版] 题目描述 角谷猜想: 日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想.猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1.请编程验证. 输入 任一正整数 输出 演算的过程 样例输入 10 样例输出 10/2=5 5*3+1=16 16/

HDU DP?(Lucas + 帕森斯定理)

DP? 题目链接:Click Here~ 题目分析: 给出一个终点坐标,求出(0,0)开始的到(n,k)的最小权重和. 算法分析: 根据杨辉三角的性质可以知道,只要往两边走则得到的值会更小.因为,C(N,M) = C(N,N-M).所以,我们尽量的斜向的往旁边走.但是,在斜向走k步后就已经到达边界了,此时只要顺着1一直往上走就可以了.所以,经过的最短路和为:C(n,k) + C(n-1,k-1) + C(n-2,k-2) + ...... C(n - k + 1,1)+ C(n - k,0) +