算法#01--素數和牛頓迭代法求平方根

素數

1.概念

質數(prime number)又稱素數,有無限個。除了1和它本身以外不再有其他的除數整除。根據算術基本定理,每一個比1大的整數,要麼本身是一個質數,要麼可以寫成一系列質數的乘積,最小的質數是2。

2.論點

在一般領域,對正整數n,如果用2到根號n之間的所有整數去除,均無法整除,則n爲質數。

3.證明

如果n不能被2到根號n之間的任一整數整除,且不是質數,那麼n可以表示爲:n=ab,其中ab是非1正整數。
因爲n不能被2到根號n之間的任一整數整除,所以a>根號n,b>根號n,ab>根號n×根號n=n。
這跟ab=n是矛盾的,所以原來的命題得證.

4.代碼實現

public static boolean isPrime(int N)
{
    if(N<2) return false;
    for(int i =2; i*i<N; i++)
        if(N%i==0) return false;
    return true;
}

牛頓迭代法求平方根

1.概念

牛頓迭代法(Newton’s method)又稱爲牛頓-拉夫遜方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。

多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。

方法使用函數f(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程f(x) = 0的單根附近具有平方收斂,而且該法還可以用來求方程的重根、復根。

2.公式

迭代公式

3.證明

例如,我想求根號2等於多少。假如我猜測的結果爲4,雖然錯的離譜,但你可以看到使用牛頓迭代法後這個值很快就趨近於根號2了:

( 4 + 2/ 4 ) / 2 = 2.25
( 2.25 + 2/ 2.25 ) / 2 = 1.56944..
( 1.56944..+ 2/1.56944..) / 2 = 1.42189..
( 1.42189..+ 2/1.42189..) / 2 = 1.41423..

曲線與切線

證明過程如下:

①設曲線爲f(x)=x²-a。

②求出一階導數函數爲f’(x)=2x。也就是說,函數上任一點(x,f(x))處的切線斜率是2x。

③根號a實際上就是x^2-a=0的一個正實根。

④不斷用(x,f(x))的切線來逼近這個根。設初始值爲x。

⑤求出一階導數函數與x軸的交點x-f(x)/(2x),此爲下一個值x,就是一個比x更接近的近似值。

那麼,代入f(x)=x^2-a得到x-(x^2-a)/(2x),也就是(x+a/x)/2。

4.代碼實現

public static double sqrt(double c)
{
    if(c<0) return Double.NaN;
    double err = 1e-15;//精度
    double t = c;//賦初值
    while(Math.abs(t*t - c)>err*t)//控制迭代精度
        t = (c/t+t)/2.0;//迭代公式
    return t;
}

最後貼一張動態演示圖:

動態演示圖

發佈了45 篇原創文章 · 獲贊 21 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章