對大整數N開平方,求其整數部分,有什麼好的演算法嗎?

時間 2021-05-05 17:33:25

1樓:陳炳好

高讚答案確實不錯,但我說的這個演算法呢?

可手算,免判斷(if),無需高精度

b=(b+a/b)/2

你沒看錯,就這一句。

算一次精度提高約0.3位,迴圈運算即可。

a是被開方數,b是結果。算第一次前設定b=ab的精度要多少,那麼運算的精度也就只要多少。

如果b的精度只需要整數,那麼本演算法也只需要取整數(截尾取整)。

……示範

625(625+625/625)/2=313(313+625/313)/2=157

(157+625/157)/2=80

(80+625/80)/2=43

(43+625/43)/2=28

(28+625/28)/2=25

(25+625/25)/2=25

嗯,很簡單吧。

當然這個演算法還可以優化一下

比如改成

a=被開方數,b=a/2

迴圈b=(b+a/b)/2

這樣的話,上面的625開方只需要5次迴圈,並且是忽略小數的純整數運算,即可算出結果。

免if判斷,這點可是其他演算法沒有的!

……演算法出處(不是我,原作者貼吧a20001017)http://tieba.baidu.com/p/2323016713

2樓:

不是大整數求根,純粹是插隊雷神之鎚裡面用到的快速演算法https://

zh.m.wikipedia.org/wiki/平方根倒數速演算法

3樓:

跑個題。

intl

;int

main

(into,

char**O

,intI)

putchar(10

);}else

returno;}

來自IOCCC 2023年的獲獎作品。

摘下眼鏡,風味更佳。

4樓:

我的直觀想法:平方根本質和除法一樣,如果只求整數部分,對於n位數只需要O=次運算(一次運算指乙個乘法和乙個減法)。

實現比二分法複雜,但運算次數永遠是二分法(lg n / lg2)的一半。但二分法也不慢,例如2^1024只需要300次運算。

5樓:

intsqrt

(intx)

else

if((

middle

<=(x

/middle

))&&

(right

-middle)==

1)else

if((

middle

<=(x

/middle

))&&

(right

-middle

)>1)}}

6樓:bh lin

1. 整數的平方間隔越來越大:1,4,9,16,25,。。。所以當n比較大的時候,n^2 和(n+1)^2之間間隔應該很大,而這之間的數的平方根的整數部分都是n。

2. 應該可以採用newton 法Newton's method,不過你可以放寬收斂的條件,因為你找的是整數部分。

如何反駁如下說法 1不是無窮大,且若正整數n不是無窮大,則n 1不是無窮大,所以無窮大不存在?

夏爾謝夫 是的,你證明了 自然數集裡沒有無窮大 a.k.a.無窮大不是自然數 當然乙個東西不是自然數不代表這個東西不存在,比如0.5 1不是0.5,且若正整數n不是0.5,則n 1不是0.5,0.5存在嗎? 高數變簡單 我感覺你要提的問題表達的不是太清楚,下面我的回答希望幫你理清下思路。在你考慮無窮...

如何證明對於任意大於 1 的正整數 n, 1 2 3 n 均為無理數?

渴飲匈奴血 我來給乙個代數的證法。話說去年三月北大數院博士生入學考試的抽象代數就考了一道類似的題,以下是我當時在考場上想出來的證法。首先,歸納可證 設p 1,p k是兩兩不同的素數,則域F Q sqrt,sqrt 在域Q上的擴張維數是2 k,並且 B 構成F的一組基。對任意n 1,取p 1,p k為...

能否找到最大的正整數n,使得能將1到n分成兩個集合,使得每個集合的任意兩數之和不是完全立方數?

畦哇矽 注意到 63,280,449 兩兩之和為完全立方數,所以當 n 449 時,這三個數總會有兩個分在同一組,這就不行了。所以一定有 n 448。n 448 的情況應該是成立的,我起床之後去構造一下。起床之後的結果 完蛋,翻車了,不是 448。注意到有以下二十一式 橫著讀 我們把這兩個集合稱為 ...