输出和为n的所有的连续自然数序列
如 n = 9:
9
4 5
2 3 4
《编程之美》的题目(2.21只考加法的面试题),去年曾经写过本题的代码,后来不知道把代码放哪里了。按以前的思路,重写了下代码,写完后翻了下书,结果发现与书上要求的还不一样。
假设,拆分成的数列为:m, m+1, … m+k-1
则 n = (m + m + k - 1) * k / 2 或 2*n = (2*m + k - 1) * k
显然就是求2*n的所有因子,最简单的方法就是暴力搜索:
对公式2*n = (2*m + k - 1) * k 进行转变,可得下面几种方法:
方法一:
2*m + k – 1 = 2 * n / k
从k = 1开始判断 k 是否是 2 * n的因子,当 k > 2 * n / k时终止
(由于2*m + k – 1和 k奇偶性相反,输出结果前还要判断k与2 * n / k是否奇偶性相反)
循环次数约为:sqrt(2*n)
方法二:
m =