2013-02-04 71 views
0

對不起,標題很差。我找不到更好的標題。 (編輯歡迎:p)快速找到最小的n,這樣對於X <= n * n

可以說有一個數字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

什麼是更有效的方式來獲得I * I包含X?

+0

你是什麼意思「4,所以它不包含數字8」?你的意思是「4是8的除數」嗎? –

+2

9如何包含8?你的意思是找到大於或等於某個輸入數的最小平方數? – Shahbaz

+0

8大於4 ....想象一個2x2網格...它會有1,2,3,4個單元格......但對於單元格8我需要3x3網格......這會給我1, 2,3,4,5,6,7,8,9 ... :) –

回答

6

使用<math.h>sqrt功能。這將是一個(相當)高效的算法,並且運行速度要比循環快得多。然後圍起來,你有你的答案。

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

    return ceil(sqr); 
} 
+0

'ceil(sqr)'也許? – effeffe

+0

恩,是的。接得好。 – Chowlett

+0

不要忘記用'-lm'鏈接/編譯。 – Jens

相關問題