获得1到N之和所需的最小元素数

时间:2015-08-10 12:34:07

标签: c++ math

我想要获得1到N之和所需的最小元素范围。 假设如果给出1和N之间的数字K,那么我想要总和为K的最小数字范围。

Example: k = 4
         To get k=4  {1,2,3} numbers form 1-3 is  enough since 1+3=4
         So 3 numbers is enough.

         Similarly if k=10 1-4 numbers is enough since 1+2+3+4=10
         So 4 numbers is enough.

1 个答案:

答案 0 :(得分:0)

如果你必须使用范围1..N来获得一些N,那么你可以得到那些最多1 + 2 + ... + N = N(N + 1)/ 2的数字。因此,如果你的数字是x,求解N(N + 1)/ 2 - x = 0,即x =(sqrt(8x + 1) - 1)/ 2并取这个数字的上限。

#include <math.h>
needed(int x) {
  double s = sqrt(8*x+1);
  return ceil((s-1)/2);
}