将一个正整数,拆分成连续的自然数之和,输出所有可能的情况

例如: 3 = 1+2

10 = 1+2+3+4

18 = 5+6+7

偶然见到这个问题,这里写下自己的解法。

分析:

对给定整数x以及一组满足要求的数字序列:a1a2……an,有

x=a1+a2+……an

数字的序列可以看做是一个公差为1的等差数列,数列的和根据数列的性质,可以得出满足要求的序列的一些性质。

数列的和即x可以数列的一项或两项来表示:

n为偶数时,x=(ai+aj)*n/2;i+j=n+1    (1)

n为奇数时,x=n*ak;k=n/2+1            (2)

1.从中可知,若n为奇数,则x一定可以被n整除,而这n个数字中间的一个就是x/n,并且可以据此得出这个数左右各(n-1)/2个数字。

若n为偶数,则(1)中的i和j可以取特定的两个值n/2、n/+1;ai和aj是相邻的两个数字,则有ai+aj是奇数,x/n=(ai+aj)/2,则有x不能被n整除,而2x可以被n整除。对于任一对i+j=n+1都有ai+aj,取i=1,j=n,可以解出a1,再依次加一得到序列的其他数字。

2.对于长度一定为n的连续自然数串,和最小的序列应该是1,2……n,和为n(n+1)/2,如果x

即应该满足:n(n+1)/2<=x →n^2<2x

由以上内容可以写出伪代码如下:

decompose(x):

n=1

while(n*n<2x)

do

if(n%2==1&&x%n==0) 有该长度数字序列

if(n%2==0&&2x%n==0&&x%n!=0) 有该长度数字序列

n++

done

c代码:

void decompose(int num)

{

//序列的长度

int i=1;

int k=0;

//序列第一个数字

int aFirst;

printf(“%d:\n”,num);

while(i*i<2*num)

{

if(i%2==1)

{

if(num%i==0)

{

aFirst=num/i-i/2;

for(k=0;k

printf(“%d “,(k+aFirst));

}

printf(“\n”);

}

}

else

{

if((2*num)%i==0&&num%i!=0)

{

aFirst=num/i-(i/2)+1;

for(k = 0;k

{

printf(“%d “,k+aFirst);

}

printf(“\n”);

}

}

i++;

}

}

分解连续自然数的和_将整数分解为连续自然数之和相关推荐

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

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

  2. java 任意多个整数相加_一个整数分为若干个连续整数之和(使用java实现)

    题目描述: 要求写出所有连续的正整数序列,使其之和等于90,小明灵光一闪,立马写上了29,30,31, 他看到解释说明台式告知答案不止一种,过了好一会,他总算算出了所有的5种答案 给你一个正整数Num ...

  3. php分解质因数,用PHP如何实现将一个整数分解为质因数的积?

    先对数字进行因式分解算法 再过滤结果集中,不符合的结果集. class Helper { public function chechPrime($num) { for ($i = floor(sqrt ...

  4. 整数拆分为连续自然数之和

    闲得蛋疼: 连续自然数之和可以利用等差数列求和公式求得: , N=n*a+n*(n-1)/2: 其中N为需要拆分的整数,n为拆分后连续自然数个数,a为连续自然数中第一位数,比如: 36=11+12+1 ...

  5. 华为OD机试题:整数表达为连续自然数之和

    题目描述: 一个整数可以由连续的自然数之和来表示,给定一个整数,计算该整数有几种连续自然数之和的表达式,并打印出每一种表达式. 输入描述: 一个目标整数t 1<= t <=1000 输出描 ...

  6. HUAWEI 机试题:整数表达为连续自然数之和(Python解法)

    题目描述: 一个整数可以由连续的自然数之和来表示,给定一个整数,计算该整数有几种连续自然数之和的表达式,并打印出每一种表达式. 输入描述: 一个目标整数t 1<= t <=1000 输出描 ...

  7. VJ 1033 整数分解(版本2)

    描述 整数分解(版本2) 一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大. 例 ...

  8. 编程将一个整数分解成一个质因数的连乘积,并打印在屏幕上

    //编程将一个整数分解成一个质因数的连乘积,并打印在屏幕上 //***本题的难点是既要找出质因数,又要保证其连乘为该数 //***需要两个循环,外循环与内循环 /*每个合数 都可以写成几个 质数 相乘 ...

  9. 51nod 13831048 整数分解为2的幂 [递推]【数学】

    题目连接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1048 ---------------------------- ...

最新文章

  1. 【剑指offer-Java版】39二叉树的深度
  2. Android媒体播放框架MediaSessionCompat介绍实践
  3. 什么是Scala的收益?
  4. mac 思科 链路聚合_交换技术链路聚合配置
  5. android两张图片切换,android recyclerview 切换列表视图
  6. 图像色调,饱和度,对比度等相关定义
  7. 41、OrthoMCL和mcl软件进行基因家族分析
  8. Android 捕获异常,上报异常日志,捕获奔溃日志,bugly使用实例
  9. 深度学习--Keras总结
  10. PHP生成静态网页的方法
  11. 【转】Mac系统中安装homebrew(类似redhat|Centos中的yum;类似Ubuntu中的apt-get)
  12. 计算机考试桌贴,考试考场桌贴打印
  13. live555学习之基本类介绍及计划任务深度探讨
  14. ubuntu 11.10 下network proxy 的设置问题
  15. java中cookie怎么用_java 中session和cookie的使用
  16. linux可执行文件bad interpreter解决方法
  17. slickedit 运行java_SlickEdit 一些使用技巧(转载)--一个人的博客
  18. 银盛支付银账通进件接口php demo 签名 上传图片 进件 获取token 超简洁sdk
  19. 浏览器控制台Network面板简述
  20. 【安卓开机启动】安卓JVM加载so库流程

热门文章

  1. python之cv2动态绘制图形
  2. oracle临时表与外部表,临时表,外部表 - wzl_up的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. FPGA数字信号处理(六)直接型IIR滤波器Verilog设计
  4. 围观一个无限循环的奇葩代码,把电脑弄死机了
  5. ChatGPT 加图数据库 NebulaGraph 预测 2022 世界杯冠军球队
  6. java sinh_java.lang.StrictMath.sinh()方法实例
  7. ABP+AdminLTE+Bootstrap Table权限管理系统一期
  8. 机器学习模型的生命周期
  9. ST17H66低功耗蓝牙SOC开发(8)—— proprietary_rf工程讲解
  10. Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载