找到最小n的快速方法,以便X <= n * n

时间:2013-02-04 14:28:52

标签: c

对不起的头衔感到抱歉。我找不到更好的头衔。 (欢迎编辑:p)

让我们说有一个数字X = 8。我知道2 * 2 = 4所以它不包含数字8。

编辑:想象一个2x2网格...... 1,2,3,4 ......它不包含8

现在,3 * 3 = 9,我们找到了胜利者(n = 3)!

用于此目的的我(差)代码

 long long int i=0; N = 8;
 while (i*i <N)
    {
        i++;
    }
    l = i; // l is to store he number "3"; say 8 is in a 3x3 grid

当N = 100000000时,这不是一种有效的计算方法。

获得包含X的i * i的更有效方法是什么?

1 个答案:

答案 0 :(得分:6)

使用sqrt中的<math.h>功能。它将是一个(相当)有效的算法,并且应该比你的循环运行得快得多。然后围捕,你有答案。

int find_containing_int(double x)
{
  const double sqr = sqrt(x);

  return ceil(sqr);
}