Java之判斷大整數是否為平方數

2021-08-25 02:38:53 字數 1230 閱讀 3143

在本篇部落格中,我們將討論如何使用有效的演算法來判斷乙個大整數是否為平方數。

給定正整數

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...