在本篇部落格中,我們將討論如何使用有效的演算法來判斷乙個大整數是否為平方數。
給定正整數
n n
,如果存在乙個整數
m' role="presentation" style="position: relative;">m
m,滿足m2
=nm 2=
n,那麼則稱
n n
為平方數。因此,判斷乙個大整數
n' role="presentation" style="position: relative;">n
n是否為平方數,很自然的想法就是,從1開始,依次遞增,判斷這個數的平方是否等於給定的數
n n
,如果是,則
n' role="presentation" style="position: relative;">n
n為平方數,如果這個數的平方大於
n n
,則n' role="presentation" style="position: relative;">n
n不是平方數。這個想法很簡單,但可惜的是,效率卻很低,因為我們要遍歷n−
−√n
個數,當
n n
很大時,這樣的效率是我們不能忍受的。
那麼有沒有其他方法呢?這時候,乙個公式進入我們的視野,那就是:1+
3+5+
...+
2n−1
=n2.
' role="presentation">1+3
+5+.
..+2
n−1=
n2.1
+3+5
+...
+2n−
1=n2
.看上去這個公式給了我們一點希望,因為我們不需要從1開始乙個乙個去找,而是只需要尋找至2n
−−√−
1 2n−
1即可。但我們仔細地分析一下,不難發現,該公式的實質和乙個乙個找沒什麼區別,因為我們還是要遍歷n−
−√n
個數。
所以,存在有效的演算法嗎?答案是肯定的!為什麼不嘗試著去計算
n n
的平方根呢?按照這個思路,我們具體的演算法,結合牛頓法,步驟如下:
初始值x0=
1' role="presentation" style="position: relative;">x0=
1x0=
1, 誤差
ϵ ϵ
足夠小;
判斷某整數是否為兩數平方之和
題 給定乙個整數 n,寫乙個程式判斷是否存在 2 個整數 a b a b 使得 a 2 b 2 n 如 輸入 n 5,輸出 true 輸入 n 7,輸出 false 思路 我們可以把整數n當成是乙個圓心在原點的園的半徑的平方。即圓的方程為 a 2 b 2 n。這樣,我們就可以使得a從1開始到根號n,...
判斷整數是否為回文數
判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 從右向左...
JS判斷是否為數字,是否為整數,是否為浮點數
正規表示式方法 function checkrate input 下面為普通函式寫法 function baseisnotnum thenum return false function baseisnotint theint return false function baseisnotfloat...