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

Ans*_*_42 0 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
Run Code Online (Sandbox Code Playgroud)

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

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

Cho*_*ett 6

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

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

  return ceil(sqr);
}
Run Code Online (Sandbox Code Playgroud)