题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。

一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:

15=1+2+3+4+5

15=4+5+6

15=7+8

有些数可以写成连续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-1)/2)%n==0,这样就很容易判断一个数可不可以写成连续n个自然数的形式了,遍历n=2…sqrt(M)*2,还可以输出所有解。

void divide(int num)

{

int i,j,a;

for(i=2; i<=sqrt((float)num)*2; ++i)

{

if((num-i*(i-1)/2)%i==0)

{

a=(num-i*(i-1)/2)/i;

if(a>0)

{

for(j=0; j

cout<

}

cout<

}

}

}

第二个问题是什么样的数可以写成连续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。

若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.

若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个自然数之和。

另一个正整数分解的算法:

sum(i,j)为i累加到j的和

令 i=1 j=2

if sum(i,j)>N i++

else if sum(i,j)

else cout i...j

参考代码:

#include

using namespace std;

int add(int m,int n)

{

int sum=0;

for(int i=m;i<=n;i++)

sum+=i;

return sum;

}

void divide(int num)

{

int i=1,j=2,flag;

int sum=0;

while(i<=num/2)

{

sum=add(i,j);

while(sum!=num)

{

if(sum>num)

i++;

else

j++;

sum=add(i,j);

}

for(int k=i;k<=j;k++)

cout<

++i;

cout<

}

}

int main()

{

int num;

cout<

cin>>num;

divide(num);

return 0;

}

时间: 01-29

分解连续自然数的和_[算法]正整数分解为几个连续自然数之和相关推荐

  1. python 正整数 连续多个数之和_[算法]正整数分解为几个连续自然数之和

    题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...

  2. 分解连续自然数的和_将整数分解为连续自然数之和

    将一个正整数,拆分成连续的自然数之和,输出所有可能的情况 例如: 3 = 1+2 10 = 1+2+3+4 18 = 5+6+7 偶然见到这个问题,这里写下自己的解法. 分析: 对给定整数x以及一组满 ...

  3. Java正整数分解质因数

    leetcode-2 Java正整数分解质因数 1.题目: 将一个正整数分解质因数.例如:输入 90,打印出 90=233*5. 2.题目解析: 先将数m从2开始整除,如果能被2整除,就将m等于m除以 ...

  4. 分解连续自然数的和_【编程练习】正整数分解为几个连续自然数之和

    题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...

  5. 分解连续自然数的和_正整数分解为几个连续自然数之和

    题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...

  6. 分解连续自然数的和_正整数分解为几个连续自然数之和-阿里云开发者社区

    题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...

  7. 正整数分解为几个连续自然数之和

    题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...

  8. 【编程练习】正整数分解为几个连续自然数之和

    题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...

  9. python对整数进行因数分解_浅谈将一个正整数分解质因数的逻辑思维和Python开发设计...

    今天讨论的是如何将一个正整数分解质因数.例如:输入36,打印出36=2*2*3*3. 1.首先要清晰两个概念,要知道什么是质数,如何进行分解质因数?质数是指在大于1的自然数中,除了1和它本身以外不再有 ...

最新文章

  1. Maven Eclipse Run as 命令
  2. 百度研究院发布2021年十大科技趋势预测
  3. 将C#编译为javascript
  4. VSCode中屏蔽文件files.exclude和屏蔽文件搜索search.exclude
  5. 反病毒引擎设计全解(四)
  6. [kubernetes] 资源管理 ---- 资源请求和限制
  7. 我想快速给WPF程序添加托盘菜单
  8. 冒泡排序 实现数据的由大到小排序
  9. string类比较大小_源码阅读String--JAVA成长之路
  10. 康乐php5.2_搭建PHP服务器调试环境套件下载-Easy2PHP5正式版下载[环境套件]-华军软件园...
  11. Python+django网页设计入门(14):使用中间件对抗爬虫
  12. 20200102每日一句
  13. [转]魔兽世界私服Trinity,从源码开始
  14. BigGAN论文解读
  15. Barra风险模型简介
  16. C语言中标量变量,如何从标量变量A,B,C和D中产生总线BusQ[0:3]?如何从两条总线B usA[0:3]和BusY[20:15]形成新的总线BusR[10:1...
  17. java pdf转图片base64,itextpdf 实现html转pdf中中文及图片base64的解决方法
  18. Kali安装谷歌拼音
  19. ASP.NET上传一个文件夹
  20. 主板后置音频接口图解_不用再看说明书 机箱主板接线全攻略

热门文章

  1. 【程序设计与算法(一)】MyMax
  2. 【董天一】IPFS的竞争对手们(二)
  3. leetcode第三十五题 搜索插入位置(Java)——二分查找
  4. myeclipse download
  5. 市场调研-全球与中国在线工作协助工具市场现状及未来发展趋势
  6. SleepBetter Privacy Policy
  7. python代码库能干什么_一行Python代码能做什么?
  8. 记录|M1 Pro mps跑模型LeNet和AlexNet
  9. Shiro用户认证和用户授权流程
  10. 2018 ACM-ICPC 中国大学生程序设计竞赛暨丝绸之路程序设计竞赛