基本思路是二分查詢,只是判斷標準變為x^2 ?= key
改進思路是縮小二分查詢的起始區間,步驟如下:
改進思路的證明:假設存在k,使得2^k >= n/(2^k),對不等式兩邊乘以2^k,得到(2^k)^2 >= n,即2^k >= sqrt(n),2^k即為a;再對上述結論兩邊取倒數,得1/(2^k) <= 1/sqrt(n),分母有理化得1/(2^k) <= sqrt(n)/n,不等式兩邊乘以n得n/(2^k) <= sqrt(n),n/(2^k)即為b。綜上,有n/(2^k) <= sqrt(n) <= 2^k,用語言描述即n的平方根若存在,必然在區間[b, a]中
**如下:
int is_square(int n)
if(low != high)
return -1; //二分查詢失敗,不存在
} else
return low; //成功
}
LintCode判斷乙個數是不是回文數
判斷乙個數是不是回文數 我的想法是先將數字變成陣列,然後設定兩個指標分別從開頭和末尾一一比對.話不多說,如下 package com.yangshunfan.lintcode 判斷乙個數是不是回文數 public class huiwenshu 設定兩個指標 int left 0 int right...
200 判斷乙個數是不是快樂數
題目如下 編寫乙個演算法來判斷乙個數 n 是不是快樂數。快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。如果 n 是快樂數就返回 true 不是,則返回 ...
判斷自然數m m 1 是不是素數
判斷自然數m m 1 是不是素數 方法一 迴圈遍歷 時間複雜度o n m除 2,m 裡的數值,結果值不為整數就可知是素數 include include intmain if i m printf d是素數 n m else printf d不是素數 n m end clock printf end...