给定数N并生成具有1的差值的算术级数,以便在求和有限元之后给出数字N,例如:
For Example:
N=10
1 + 2 + 3 + 4 =10
N=20
2+3+4+5+6 = 20
N=30
4+5+6+7+8 = 30
N <1000000
以sum = 0开头.
设1为当前数字.
将当前数字添加到总和中.
如果sum > N,从第一个数字中减去数字加到总和中直到sum <= N.
如果sum = N(成功)停止.
增加当前数量.
从第3步继续.
你只需要记住第4步中加入总和的第一个数字,当你从总和中减去它时,你将增加1(感谢Niko).
作为优化,您还可以使用公式(n(n+1)/2)来批量添加数字,而不是逐个添加它们(如果N是大的话).
例:
N = 30
Sum = 0
Add 1 -> 1
Add 2 -> 3
Add 3 -> 6
Add 4 -> 10
Add 5 -> 15
Add 6 -> 21
Add 7 -> 28
Add 8 -> 36
36 > 30, so:
  Subtract 1 -> 35
  Subtract 2 -> 33
  Subtract 3 -> 30
Done.
设T为数字
所以在你的第一种情况下N(N + 1)/ 2 = T,其中N = 4
在第二种情况下N(N + 1)/ 2 - K(K + 1)/ 2 = T,其中N = 6&K = 1
在第三种情况下N(N + 1)/ 2 - K(K + 1)/ 2 = T,其中N = 8&K = 3
所以你解决N基本上是通过乘以减少得到的
N ^ 2 + N - (2T + K ^ 2 + K)= 0
应用N的二次方程式,即N =( - b + sqrt(b ^ 2 - 4ac))/ 2a
所以我们得到,N =( - 1 + - sqrt(1 + 8T + 4K ^ 2 + 4K))/ 2
N必须是正数,所以我们可以删除负面情况
因此N必须等于N =(sqrt(8T +(2k + 1)^ 2) - 1)/ 2你可以从K = 0迭代直到你得到一个自然数N这将是你的答案
希望它有所帮助,Iam试图找到一个更好的方式,因为我这样做(欣赏有趣的问题)