《编程之美》2.21 只考加法的面试题

给银河麒麟V10SP1服务器系统做个‘瘦身’:手把手教你精简ISO镜像并集成KickStart 本文详细介绍了如何精简银河麒麟V10SP1服务器系统的ISO镜像并集成KickStart实现自动化部署。通过分析系统依赖关系、分级删除非必要组件、动态更新关键组件等步骤,将镜像从8GB精简至3GB,同时提供KickStart配置模板优化和自动化验证方案,显著提升部署效率。适用于企业IT基础设施快速迭代场景。 阅读详情

注:leoyonn原创,请注明出处 http://hi.baidu.com/leoyonn

 

问题1. 写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式;

问题2. 例如32就找不到这样的表达,这样的数字有什么规律?

问题3. 在64位正整数中,子序列数目最多的是哪一个?能否用数学知识推导出来?

 ------------------------------------------------------------------------------------------------------------

解答1. 首先分析,

 

对于正整数N,如果表示成2个连续自然数相加,N = m + (m + 1) = 2m + 1,则N为奇数;

如果表示成3个连续的自然数相加,N = (m - 1) + m + (m + 1) = 3m,则N为3的倍数;

如果表示成4个连续的自然数相加,N = (m - 1) + m + (m + 1) + (m + 2) = 2 * (2m + 1),则N为某奇数的2倍;

如果表示成5个连续的自然数相加,……,则N为5的倍数;

如果表示成5个连续的自然数相加,……,则N为某奇数的3倍;

……

 

已经找到规律了:对于N,

如果表示成偶数个(2 * k) 连续的自然数相加,      则N为k的倍数;

如果表示成奇数个(2 * k + 1)连续的自然数相加, 则N为(2 * k + 1)的倍数。

 

这样程序就好写啦:

 

 

 

 ------------------------------------------------------------------------------------------------------------

 

解答2. 从分析中可以看出,N的因式分解必然要有奇数。证明如下:

 

 a. 首先证明,只要N的因式分解中有奇数,N就能表示为自然数连和。

     如果N的因式分解中有奇数,假设为s,且N= k * s,

     如果k > s/2,

     则 N可以表示为这个序列的和:k - (s / 2), k - (s / 2) + 1 ... k + (s / 2);

     例如 54 = 6 x 9, 可表示为 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;(6 x 9,偶数为6,则6在这9个自然数的序列的中间)

   

     如果 k < s/2,

     则N可以表示为这个序列的和:(s + 1)/2 - k, (s+1)/2 - k + 1,..., (s + 1)/2 + k - 1;

     如54 = 2 x 27,则可表示为 12 + 13 + 14 + 15;(中间两个数 13 + 14 = 27)

 

 b. 再证明:如果N的因式分解中没有奇数,则N不能表示成连和的形式。

 

     反证:如果能,假设N能表示成k个自然数的连和。

     如果k为偶数,设这k个数的中数(中间偏左的一个)为m,将这k个数收尾相加得到k/2个自然数的序列,

     易证这k/2个自然数都等于2m+1,

     那么N = (2m + 1) * k / 2,与N的因式分解中没有奇数矛盾;

 

     如果k为奇数,设中数为n,那么N = k * n,与N的因式分解中没有奇数矛盾。

 

     综上,得证。

 

 ------------------------------------------------------------------------------------------------------------

解答3.

从2的推导过程中想到,将N表达成X*Y的形式,Y为奇数(X可以为1),这种表达形式越多,N的连和序列就越多。

这样,将N分解为质因子,例如150 = 2 * 3 * 5 * 5,找到其中所有的奇数,这些奇数能构成的组合数就是N的连和数。

如3,5,5能构成3;5;3*5;5*5;3*5*5,共5种,所以N的连和数也是5个。经验证,正确,嘿嘿。

 

再进一步想,已经知道N的质因子分解情况,怎么计算有多少个序列?

 

例如3*5,有3,5,3*5,共3种;

而3*3*5,上面已经说过,共5中;

3*3*3*5,有3,3*3,3*3*3,5,3*5,3*3*5,3*3*3*5,共7种……

 

总结得到:

假设N的质因子分解中有k种奇数(不是k个)记为odd[1,..,k],odd[i]有n[i]个,那么N能表示的序列数为:

 

    Ns = (n[0] + 1) * (n[2] + 1) * (n[3] + 1) * ... * (n[k] + 1) - 1

 

验证:3*3*3*3*5*5*7*7*7 = 694575,我用程序打印,输出了59个。

这里有4个3,2个5,3个7,(4+1)*(2+1)*(3+1) - 1 = 60 - 1 = 59,验证成功。而694575乘以2的任意幂次方,所得结果都是59.

 

 我这没有想到严格的逻辑证明这个思路得到的结果是正确的,呵呵。

 

接下来就可以思考第三题了:在64位正整数中,子序列数目最多的是哪一个?

已经知道,要求的就是要让子序列数目最多Ns最多,但是64位正整数中“最”多的是谁?首先是一个很大的奇数^^。

 

这里我又做一个实验:

3*5*7*13 = 1365,分解出的连和15个;

3*3*5*5*7 = 1575,有17个,

3*3*3*3*3*7 = 1701, 有11个;

 

到底哪种组合能够达到最多的那个?这个我没想出来…… 各位有想法的还请不吝赐教:)

 

呵呵,个人想法,欢迎拍砖,指正:)

 

NI数据采集卡测电流的三种‘姿势’:直接连接、外接分流电阻还是用电流互感器?看完这篇不再纠结 本文全面解析了NI数据采集卡在电流测量中的三种主流方案:直接连接、外接分流电阻和电流互感器。通过对比精度、带宽、隔离等关键参数,结合NI-DAQmx软件生态,为工业自动化、电力监测等场景提供选型指南和实战技巧,帮助工程师优化测量系统设计。 阅读详情

相关推荐

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 637

数论数学:所有自然数之和为-1/12的证明

这篇博客也是因为泰勒展开而水出来的一篇 求证:1+2+3+4+....=−1121+2+3+4+....=-\frac{1}{12}1+2+3+4+....=−121​ 证明:设S=1+2+3+4+....S=1+2+3+4+....S=1+2+3+4+.... 则根据泰勒展开:11−x=1+x+x2+x3...\frac{1}{1-x}=1+x+x^2+x^3...1−x1​=1+x+x2+x3...

china_xyc的博客 1万+

电动汽车simulink模型

市场上各类电动汽车的simulink,种类很全,包括各种电动汽车的经济性、燃油性分析。

一个正整数表示为n(n>=2)个连续正整数之和!

今天下午无意中看到这个题目:   题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:  15=1+2+3+4+5  15=4+5+6  15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。  输入数据:一个正整数,以命令行参数的形式提供给程序。  输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每

zhizunwudi的专栏 5548

中学数学证明所有自然数和为-1/12

没看得太明白。   超弦理论的弦除了在普通空间的D维方向上振动之外,还在超空间的格拉斯曼数坐标方向上振动,因此,光子的质量必须包含该方向上的量子摇摆效果,计算结果就是弦论的三倍,所以我们得到超弦理论的维度为9维(九维+格拉斯曼数的超空间)再加时间的维度。这就是超弦理论9维的理由。  ...

柳鲲鹏 7231

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

题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。 一个正整数有可能可以被表示为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开头的

shiter编写程序的艺术 4753

[原]编程2.21加法面试题

[原]编程2.21加法面试题 题目如下: -------------------------------------------------- 看了这么多题目,有人不禁会想,这些题目都太难了!有没有容易的?这里有一题,只用到加法,大家别嫌题...

anqing6281的博客 177

编程2.21加法面试题

问题1. 写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式; 问题2. 例如32就找不到这样的表达,这样的数字有什么规律? 问题3. 在64位正整数中,子序列数目最多的是哪一个?能否用数学知识推导出来? 问题1直接见代码,如下: /*****************************************************

hugang012070的专栏 1144

编程》读书笔记:“只加法面试题” (2.21节)

作者:haykey(原博客地址:http://blog.csdn.net/haykey/archive/2008/10/29/3175373.aspx) 最近时日,从dangdang买了本MARA众高人写的《编程》,里面有这么一道题,其中并没有给出问题的解答。一时兴起,就在电脑前动了动手,特献丑与此。BTW,《编程》应该是每一位热爱编程技术的IT从业人员桌案边必备的好书。当我还在沉

959

编程2.21加法面试题

编程2.21加法面试题   我们知道: 1+2 = 3; 4+5 = 9; 2+3+4 = 9。 等式的左边都是两个或两个以上连续的自然数相加,是不是所有的整数都可以写成这样的形式呢? 问题1:  对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。 问题2:  大家在测试上面程序的过程中,肯定会注意到有一些数字不能表达为一系列连续的自然数 之...

weixin_33936401的博客 125

编程2.21——只加法面试题

问题描述:写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式。 例如:3=1+2; 9=5+4; 9=2+3+4。 刚开始看到这个题目,直接想到的方法就是蛮力解决:即对于每一个输入的整数,从1开始加,一直加到等于或者大于这个整数为止。如果等于这个整数,则找到了一种连续自然数相加的模式;如果大于这个整数,则无法找到,继续从2开始加,依次类推。例如对于5来说,首先从

caojunhao123的专栏 985

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

题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:15=1+2+3+4+515=4+5+615=7+8有些数可以写成连续N(>1)个自然数之和,比如14=2+3+4+5;有些不能,比如8.那么如何判断一个数是否可以写成连续N个自然数之和呢?一个数M若可以写成以a开头的连续n个自然数之和,则...

weixin_39843847的博客 5428

连续自然数之和问题(多种解法)

/**//*对一个给定的自然数M,求出所有的连续的自然数段(连续个数大于1),这些连续的自然数段中的全部数之和为M。例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解。        输入格式 Input Format     包含一个整数的单独一行给出M的值(10         输出格式 Output Fo

Welcome to oopos's Blog 4754

找出最大连续自然数个数

http://blog.csdn.net/xiajun07061225/article/details/8706276 貌似geeks上也有,待研究

stay hungry,stay foolish 848

循环-04. 验证“哥德巴赫猜想”(20)

验证“哥德巴赫猜想”(20)

ch717828的专栏 4978
上一篇: 《编程之美》2.20 程序理解和时间分析
下一篇: 递归与循环
lyso1
博客等级 码龄17年 52粉丝 22原创
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值