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

一个正整数有可能可以被表示为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(intnum)

{inti,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 namespacestd;int add(int m,intn)

{int sum=0;for(int i=m;i<=n;i++)

sum+=i;returnsum;

}void divide(intnum)

{int i=1,j=2,flag;int sum=0;while(i<=num/2)

{

sum=add(i,j);while(sum!=num)

{if(sum>num)

i++;elsej++;

sum=add(i,j);

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

cout<

cout<

}

}intmain()

{intnum;

cout<

cin>>num;

divide(num);return 0;

}

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

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

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

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

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

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

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

  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. 分解连续自然数的和_小学奥数各年级经典题解题技巧大全——分解因数法(2)...

    *例7: 在等式35×(    )×81×27=7×18×(    )×162的两个括号中,填上适当的最小的数.(适于六年级程度) 解:将已知等式的两边分解质因数,得: 5×37×7×(    )=2 ...

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

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

  8. 自然数分解:任何一个自然数m的立方均可写成m个连续奇数之和。编程实现:输入一自然数 n,求组成 n3的 n个连续奇数。

    标题 自然数分解 类别 流程控制 时间限制 2S 内存限制 1000Kb 问题描述 任何一个自然数m的立方均可写成m个连续奇数之和.例如: 13=1 23=3+5 33=7+9+11 43=13+15 ...

  9. C语言经典例14-将一个正整数分解质因数

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 将一个正整数分解质因数.例如:输入909090,打印出 90=2∗3∗3∗590 = 2 * 3 * 3 * 590=2∗3∗3∗5 2 分 ...

最新文章

  1. VIT自适应语音转文本可预测长度和内容(ocr也可)
  2. Hive中文注释乱码解决方案
  3. python——装饰器和语法糖效果
  4. scrapy 解决Redirecting 301 302重定向问题
  5. 判断三个数是否能构成三角形_三角形的面积
  6. vue base64图片不显示_技巧 | word中插入的图片显示不完整怎么办?
  7. mysql架构深入_mysql性能优化2:深入认识mysql体系架构
  8. Nginx限制连接数和下载速度
  9. 计算机英语初级考试时间,2020年考研考试时间安排及考试科目_考研网
  10. linux 查找文件 mysql数据库_Linux下MySQL数据库目录多了好多文件
  11. mysql 配置 explicit_defaults_for_timestamp
  12. 网上管家婆软件,最新在线进销存软件。
  13. python——xlwt
  14. 2019“华为杯”第十六届研究生数模竞赛F题一等奖7/2790方案
  15. redis px nx ex xx
  16. win10计算机方差,标准差计算工具
  17. 数据处理笔记9:缺失值-多变量插补
  18. 知网和万方下载论文收费模式,被这家网站打破,令人拍手叫好
  19. APE格式文件全攻略
  20. 图解PKCS#1(合)

热门文章

  1. 牛客网Wannafly挑战赛4 C.割草机(模拟)
  2. AI换脸踩坑记录:Faceshifter
  3. 软工第一次结对作业——原型设计
  4. Unity之射线穿透
  5. Python入门自学进阶-Web框架——33、瀑布流布局与组合查询
  6. 【数据库可视化工具】免费数据库可视化工具(免费)
  7. 计算机病毒课程设计论文,计算机病毒毕业设计论文.doc
  8. 梦幻西游手游经验任务链计算机,梦幻西游手游任务链任务详解 秒杀300环
  9. educoder第5关:32位快速加法器设计
  10. AtmelStudio 7 ASF库学习笔记一:新建工程、配置时钟、下载程序和查看官方例程