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

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

一个正整数有可能可以被表示为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,还可以输出所有解。

copycode

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<i; ++j)  cout<<a+j<<" ";  }  cout<<endl;  }  }   
}  

copycode[1]

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

另一个正整数分解的算法:
sum(i,j)为i累加到j的和 
令 i=1 j=2 
if sum(i,j)>N i++ 
else if sum(i,j)<N j++ 
else cout i...j

参考代码:

copycode[2]

#include <iostream>   
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<<k<<" ";  ++i;  cout<<endl;  }  
}  int main()  
{  int num;  cout<<"Please input your number:"<<endl;  cin>>num;  divide(num);  return 0;  
}  

copycode[3]

转载于:https://www.cnblogs.com/wuyida/p/6301374.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS-C语言第12天,(函数指针)Point and macro(宏)

转载于:https://www.cnblogs.com/xiangrongsu/p/4309366.html

c# 两个数的加减乘除

Console.Title "加减乘除"; double x, y,z0; string m; int n0; Console.WriteLine("第一个数&#xff1a;"); x Convert.ToDouble(Console.ReadLine()); Console.WriteLine("运算符(默认为加)&#xff1a;"); m Console.ReadLine(); m (m &…

mysql建表语句

在sql语句中注意“约束的概念": 1.实体完整性约束(主键--唯一且非空) primary key()违约处理:No action(拒绝执行)2.参照完整性约束(外键约束)foregin key() references tableName(filedName) [on delete|update casecade | no action]违约处理:级联更新或拒绝执行3.用户自…

HTTP协议(1)—HTTP的连接

一、TCP连接过程:a.浏览器解析出主机名b.浏览器查询出这个主机名的IP地址c.浏览器获得端口号d.浏览器发起到ip:port的连接(TCP连接)e.浏览器向服务器发送一条HTTP报文f.浏览器从服务器读取HTTP响应报文g.浏览器关闭连接1.TCP的可靠数据管道从TCP连接一端填入的字节会从另一端以…

Apache POI使用详解

1.POI结构与常用类(1)POI介绍Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。(2)POI结构说明包名称 说明HSSF 提供读写M…

Http协议(3)—HTTP实体和编码

HTTP实体实现目标.可以被正确识别(通过Content-Type和Content-Launage).可以被正确解包(通过Content-Lenght首部和Content-Encoding首部).是最新的(通过实体验证码和缓存过期控制).符合用户需要(基于Accept系列的内容协商首部).在网络上可以快速有效的传输(通过范围请求、差异编…

架构之美—软件架构6大步骤(开篇)

1> 需求分析2> 领域建模3> 确定关键需求4> 概念架构设计5> 细化架构设计6 架构验证 转载于:https://www.cnblogs.com/kool/p/6695766.html

Http协议(2)—客户端的识别与cookie机制

一、Http用户识别的机制1.承载用户身份的http首部2.客户端IP地址跟踪,根据客户端IP地址进行识别3.用户登录,用认证方式识别用户4.胖URL&#xff0c;一种在URL中嵌入识别信息的技术5.cookie,一种持久身份识别技术二、HTTP首部1.From包含用户的Email地址2.User_Agent将用户所用浏…

经典PCB软件比较阐述—Cadence和Mentor(整理)

PCB(Printed Circuit Board&#xff09;设计软件经过多年的发展、不断地修改和完善&#xff0c;或优存劣汰、或收购兼并、或强强联合&#xff0c;现在只剩下Cadence和Mentor两家公司独大。 Cadence公司的推出的SPB(Silicon Package Board)系列&#xff0c;原理图工具采…

RHEL 集群(RHCS)配置小记 -- 文档记录

1、RHEL 6 集群配置官方管理手册 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pdf/Cluster_Administration/Red_Hat_Enterprise_Linux-6-Cluster_Administration-zh-CN.pdf 2、官方讲解Fencing设备原理 https://access.redhat.com/documen…

Http协议(5)—HTTP摘要认证

一、摘要认证的改进1.用摘要保护密码客户端不发送密码,而是发送一个摘要&#xff0c;服务端只需验证这个摘要是否和密码相匹配2.单向摘要a.摘要是一种单向函数,将无限的输入值转化为有限的b.常见的摘要为MD5&#xff1a;将任意长度的字节序列转换为一个128位的摘要;MD5的128位摘…

c#常用正则表达式

public class RegexUtil {private RegexUtil() { }private static RegexUtil instance null;/// <summary>/// 静态实例化单体模式/// 保证应用程序操作某一全局对象&#xff0c;让其保持一致而产生的对象/// </summary>/// <returns></returns>publi…

Http协议(4)—HTTP认证机制

一、认证1.HTTP质询/响应认证框架服务器收到一条请求并没有按照请求执行动作,而是以一个认证质询执行响应,要求用户提供一个保密信息说明他是谁,当用户再次发送请求时要附上保密证书,如果证书匹配则执行请求,否则返回一条错误信息2.认证协议与首部官方的两个认证协议:基本认证、…

C#加密解密DES字符串转

using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO;namespace Component {public class Security{public Security(){ }//默认密钥向量private static byte[] Keys { 0x12, 0x34, 0x56, 0x78, 0x90, …

Http协议(6)—安全HTTP

一、保护HTTP的安全1.功能:.服务器认证:客户端知道它是在与真正的服务器进行通信.客户端认证:服务器知道它是在与真正的客户端进行通信.完整性:服务器与客户端的数据不会被修改.加密:客户端与服务器的对话是私密的,不会被窃听.效率:运行足够快的算法.普适性:所有客户端和服务器…

restful处理

重写/覆盖 HTTP 方法 一些HTTP客户端仅能处理简单的的GET和POST请求&#xff0c;为照顾这些功能有限的客户端&#xff0c;API需要一种方式来重写HTTP方法. 尽管没有一些硬性标准来做这事&#xff0c;但流行的惯例是接受一种叫 X-HTTP的请求头&#xff0c;重写是用一个字符串值…

Http协议(7)—Http缓存

一、冗余的数据传输有些客户端访问服务器页面时,服务器会多次响应同一个页面的副本给客户端&#xff0c;这会产生冗余数据&#xff0c;故使用缓存就可以保留第一条相应的副本&#xff0c;以后就响应缓存的数据二、带宽瓶颈在需要下载大型文件时,如果在局域网中放入该文件的一个…

Apache JMeter--网站自动测试与性能测评

Apache JMeter--网站自动测试与性能测评2013-02-28 15:48:05标签&#xff1a;JmeterFrom:http://bdql.iteye.com/blog/291987 出于学习热情&#xff0c;翻译总结Emily H. Halili的《Apache JMeter》一书的部分内容。 JMeter的简介 可以肯定的是&#xff0c;JMeter至少符合以下几…

Linux 重命名文件

inux下重命名文件或文件夹的命令mv既可以重命名&#xff0c;又可以移动文件或文件夹. 例子&#xff1a;将目录A重命名为B mv A B 例子&#xff1a;将/a目录移动到/b下&#xff0c;并重命名为c mv /a /b/c 其实在文本模式中要重命名文件或目录的话也是很简单的&#xff0c;我们只…

苦逼的.net程序员, 转行高富帅iOS移动开发

先知先觉,后知后觉 **- 在做了两三年.net开发后, 还是感觉.net不是那么牛逼, 许多给我一起搞.net的同学, 不是去做了android, 就是去做了iOS, 或者java; 这让我对.net的前景有了一些动摇, 在三思考之后,还是决定放弃.net ,理由很简单,就是工资有点低; 由于蓝鸥iOS培训机构,一…