#829 连续整数求和
【1】题目网址
【2】题目分析
给定一个正整数 N
,试求有多少组连续正整数满足所有数字之和为 N
?
示例 1:
输入: 5 输出: 2 解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。
示例 2:
输入: 9 输出: 3 解释: 9 = 9 = 4 + 5 = 2 + 3 + 4
示例 3:
输入: 15 输出: 4 解释: 15 = 15 = 8 + 7 = 4 + 5 + 6 = 1 + 2 + 3 + 4 + 5
说明: 1 <= N <= 10 ^ 9
【3】题目思路:
该问题可以用数学的求和来进行解决,主要有以下的几个重要的部分:
(1)确定要进行多少个循环。显然,从1开始加可以得到最大的求和数的数量n = sqrt( 2 * N)
(2)由于循环是以数的数量,因此求和公式中只有一个未知量。由于该未知量一定要是整数,所以可以用求模运算来进行确认
代码如下:
class Solution:
def consecutiveNumbersSum(self, N):
n = int(math.sqrt(2 * N))
sum = 0
for i in range(1,n + 1):
if(2 * N % i == 0):
if (2 * N / i - i + 1) % 2 == 0:
sum += 1
return sum
【4】通过结果: