早教吧 育儿知识 作业答案 考试题库 百科 知识分享

大部分的正整数可以表示为2个以上连续整数之和.例如,6=1+2+3,9=5+4=2+3+4.现在要求计算给定的正整数可以表示为多少个2个以上连续整数之和.输入数据只有一行,一个正整数N(1

题目详情
大部分的正整数可以表示为2 个以上连续整数之和.例如,6 = 1 + 2 + 3 ,9 = 5 + 4 = 2 + 3 + 4 .
现在要求计算给定的正整数可以表示为多少个2 个以上连续整数之和.
输入数据只有一行,一个正整数N(1
▼优质解答
答案和解析
令N=n+(n+1)+……+(n+m)=(m+1)(2n+m)/2
即是要找出满足N=(m+1)(2n+m)/2的正整数m、n


N=(m+1)(2n+m)/2 可变形为 m²+(2n+1)m+2n-2N=0,这可视为是以m为自变量的一元二次方程,其判别式△=(2n+1)²-4(2n-2N)=(2n-1)²+8N必须为完全平方数,才能使求得的m为整数.
这时m=[√△-(2n+1)]/2(由于m大于0,舍掉负数那个根)


所以只需要将n从1开始到1000结束进行循环,逐一判断√△是否为整数即可.


不知道你用的什么编程工具.用Excel VBA代码演示如下:


Sub findN()


N = InputBox("输入N值")
Dim aa() '存储结果


For i = 1 To 1000
If Round(((2 * i - 1) ^ 2 + 8 * N) ^ 0.5) = ((2 * i - 1) ^ 2 + 8 * N) ^ 0.5 And ((2 * i - 1) ^ 2 + 8 * N) ^ 0.5 - (2 * i + 1) <> 0 Then
   m = m + 1
   j = (((2 * i - 1) ^ 2 + 8 * N) ^ 0.5 - (2 * i + 1)) / 2
   ReDim Preserve aa(m)
   For k = 1 To j
   aa(m) = aa(m) & (i + k) & "+"
   Next k
   aa(m) = Left(i & "+" & aa(m), Len(i & "+" & aa(m)) - 1)
End If
Next i


For k = 1 To m
bb = bb & aa(k) & (Chr(10) & Chr(13))
Next k
bb = Left(bb, Len(bb) - 1)


MsgBox "共有" & m & "个方案:" & (Chr(10) & Chr(13)) & bb


End Sub




结果展示: