给定数字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<百万
答案 0 :(得分:7)
以sum = 0开头。
设1为当前数字。
将当前数字添加到总和中。
如果sum > N
,请将sum <= N
之前添加到总和的第一个数字中的数字减去。
停止sum = N
(成功)。
增加当前数量。
从第3步继续。
你只需要记住第4步加上第一个数字,当你从总和中减去它时,你将增加1(感谢Niko)。
作为优化,您还可以使用a formula (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.
答案 1 :(得分:5)
设T为数字
所以N(N + 1)/ 2 = T在你的第一种情况下,其中N = 4
N(N + 1)/ 2 - K(K + 1)/ 2 = T在你的第二种情况下,其中N = 6&amp; K = 1
N(N + 1)/ 2 - K(K + 1)/ 2 = T在你的第三种情况下,其中N = 8&amp; K = 3
所以你基本上通过乘以&解;减少你得到
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试图找到一个更好的方式,因为我这样做(欣赏有趣的问题)
答案 2 :(得分:2)
设N = pq
其中p
是一个奇数正整数,q
是任何正整数。
(1)您可以将N
写为p
个连续整数的总和,并将q
作为中间值。
(2)如果p
和q
都是奇数(例如,q = 2k+1
),您还可以将N
写为连续2p
的总和整数,中间有k
和k+1
。
例如,让N = 15 = 5 x 3
。
如果我们选择p=5
,则遵循规则(1),我们会1+2+3+4+5 = 15
。
或者通过规则(2)我们也可以写(-3)+(-2)+(-1)+0+1+2+3+4+5+6 = 15
。
我们也可以选择p = 3
来获取4+5+6 = 15
和0+1+2+3+4+5 = 15
。
答案 3 :(得分:2)
int NumSum(int val)
{
int n = 0, i = 0, j;
while (n != val)
{
n = 0;
j = ++i;
while (n < val)
n += j++;
}
return i;
}
没有花哨的数学,只是简单的方法。返回数字开始计数。
答案 4 :(得分:1)
这更像是一种技巧方法&amp;我认为它可能会奏效。
假设数字为10然后从n / 2开始一个序列,即5 现在序列不能
5 + 6从10> 11因此我们必须向后工作5也是我们需要考虑的数字的上限,因为像6 + 7等的数字将超过10所以序列的最后一个数字(最高)将是5。 向后移动5 + 4 = 9&lt; 10
5 + 4 + 3 = 12> 10所以删除第一个元素有点像队列。
所以20岁了 start = 20/2 = 10
我想这是对已接受答案的一种变化,但仍然认为我可以将其作为替代解决方案添加。
答案 5 :(得分:0)
首先,每个奇数是AP长度2的总和,因为n = floor(n/2) + ceil(n/2)
。
更有趣的是,具有奇数除数d的数字是n/d
附近的AP长度d(差值1)的总和。例如,30可以被5整除,AP的总和也是6:30 = 4 + 5 + 6 + 7 + 8
。
没有奇数除数的数字是2的幂。虽然1 = 0 + 1
和2 = -1 + 0 + 1 + 2
,但更大的幂不是任何(非平凡的)算术级数的总和。为什么?假设2**m = a + (a+1) + .. + (a+k-1)
。汇总系列= k (2a + k-1) / 2
。 k必须是奇数或偶数,但任何一个选择都与2的幂相矛盾。