在刷水題的時候看到乙個要開根號的, 雖然可以math.sqrt()解決這個問題
problem - 2009acm.hdu.edu.cn
抱著好玩的心態, 找到了關於開根號的兩種演算法, 二分法開根號和牛頓迭代法。
第一種是二分法開根號, 當start<=end的時候, 先計算mid, 然後比較mid的平方是不是
=x, 如果相等直接返回x就行了, x比較大的話就在mid+1到end進行二分查詢, 同時還要對ans進行更新, x較小的話就在start到mid+1進行二分查詢。
時間複雜度是o(log x), math.sqrt()的好像是o(1) - -static int squareroot(int x)
int start = 1,end = x, ans = 0;
while (start <= end)
//xif (mid*mid < x)
else
}return ans;
}
(更具體的)
牛頓迭代法用求方程近似根的方法, 先估計出乙個和方程的根比較接近的值, 再用
公式推算出下乙個更接近的值, 不斷的重複這個過程就可以得到滿意的精度, 所以
比較關鍵的地方在於選第乙個近似根, 還有起始值上面。
static int sqrtnewton(int num, int e)
while (e0 > e);
return guess;
}
求方程根 (二分法)
二分法求方程的根 求下面方程的乙個根 f x x3 5x2 10x 80 0 若求出的根是a,則要求 f a 10 6 解法 對f x 求導,得f x 3x2 10x 10。由一元二次方程求根公式知方呈f x 0 無解,因此f x 恆大於0。故f x 是單調遞增的。易知f 0 0且f 100 0,所...
二分法求方程根
二分法是計算機上的一種常用演算法,下面列出計算步驟 step1 計算 step2 計算 step3 若 0,則若若 如下 erfen.m 有根區間 a,b 函式 y x 2 2 呼叫了erfenhanshu a 1 b 6 e 10 cnt 0 while e 0.1 cnt cnt 1 fa er...
二分法 牛頓法開根號
牛頓法 public static double sqrtn1 double value,double accurary double init 1.0 while math.abs init init value accurary return init 二分法和牛頓法的時間複雜度都是o logn...