编程之美2.21 什么样的数不能写成连续N个自然数之和
来源:互联网 发布:优酷为什么显示没网络 编辑:程序博客网 时间:2024/05/17 22:25
有些数可以写成连续N(>1)个自然数之和,比如14=2+3+4+5;有些不能,比如8.那么如何判断一个数是否可以写成连续N个自然数之和呢?这是这一节的基本问题。
一个数M若可以写成以a开头的连续n个自然数之和,则M=a+(a+1)+(a+2)+...+(a+n-1)=n*a+n*(n-1)/2,要求a!=0,否则就是以a+1开头的连续n-1个整数了,也就是要求(M-(n+n*(n-1)/2))%n==0,即(M-(n*(n+1)/2))%n==0,这样就很容易判断一个数可不可以写成连续n个自然数的形式了,遍历n=2...sqrt(M)*2,还可以输出所有解。
第二个问题是什么样的数可以写成连续n个自然数之和,什么样的数不能?
通过编程实验发现,除了2^n以外,其余所有数都可以写成该形式。下面说明为什么。
若数M符合条件,则有M=a+(a+1)+(a+2)+...+(a+n-1)=(2*a+n-1)*n/2,而2*a+n-1与n肯定一个为奇数一个为偶数,即M一定要有一个奇数因子,而所有2^n都没有奇数因子,因此肯定不符合条件。
再证明只有M有一个奇数因子,即M!=2^n,M就可以写成连续n个自然数之和。假设M有一个奇数因子a,则M=a*b。
1)若b也是奇数,只要b-(a-1)/2>0,M就可以写成以b-(a-1)/2开头的连续a个自然数;将这条结论里的a和b调换,仍然成立。15=3*5=1+2+3+4+5=4+5+6.
2)若b是偶数,则我们有一个奇数a和一个偶数b。
2.1)若b-(a-1)/2>0,M就可以写成以b-(a-1)/2开头的连续a个自然数。24=3*8=7+8+9.
2.2)若(a+1)/2-b>0,M就可以写成以(a+1)/2-b开头的连续2*b个自然数。38=19*2=8+9+10+11.
上述两个不等式必然至少有一个成立,所以可以证明,只要M有一个奇数因子,就一定可以写成连续n个自然数之和。
第三个问题是,在64位整数范围内,能写成最多种连续n个自然数之和的数是哪个?
对于数M,考察其所有奇数因子,是否满足上述的三个不等式,每满足一个不等式,就可以有一种用连续n个自然数相加将其表示的方法,当然不可能三个都满足,因为b不可能同时为奇数和偶数。
- 编程之美2.21 什么样的数不能写成连续N个自然数之和
- 整数分解成连续自然数之和问题(《编程之美》2.21节)研究
- C#程序设计--任何一个自然数m的立方均可写成m个连续奇数之和
- 算法小题一(论证任何自然数的n次方等于n个连续基数之和)
- 算法小题一(论证任何自然数的n次方等于n个连续基数之和)
- WOJ1088-从1开始的N个连续自然数的M次方之和
- 前n个自然数的阶乘之和(单数,双数,全部)
- 算出所有不能写成两个过剩数之和的正整数之和。
- 将一个正整数n,拆分成连续的自然数之和,输出所有可能的情况
- 连续自然数之和
- poj2140 连续自然数之和
- 自然数序列,找出任意连续之和等于n的所有子序列
- 编程之美 N个正整数的数组 寻找丢失的数 和 寻找唯一重复的数
- 蓝桥杯 C++ 输入一个自然数n,n的立方等于n 个连续的奇数和
- 【编程练习】正整数分解为几个连续自然数之和
- 一个无序自然数序列有N个自然数,快速找到二者之和为M的两个整数并输出
- 欧拉工程第23题 算出所有不能写成两个过剩数之和的正整数之和
- 输入一自然数n,求组成n3的n个连续奇数
- free&delete&delete[]
- 安装rpm包时遇到error: Failed dependencies:错误
- Box ,Dividebox,Panel 、canvas布局组件的应用
- 查看SAP内核信息
- GCC 常见错误解析
- 编程之美2.21 什么样的数不能写成连续N个自然数之和
- C++ 程序文档生成器介绍(doxygen)
- 网站推广优化教程100条(完整版)
- jquery拼图,draggable插件
- TCP/IP Socket 网络通信 基础
- 关于“document.write”的用法
- 结构体0长度数组的作用
- 第二章 - 函数模板
- 自动更新 C#