有效的完全平方数

有效的完全平方数_第1张图片
经过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(xi)(x - xi),
其中f’(x)为f(x)的导数,本题中为2x。令切线方程等于0,即可求出xi+1=xi - f(xi) / f’(xi)。
继续化简:

xi+1
=xi - (xi2 - n) / (2xi)
= xi - xi / 2 + n / (2xi
= xi / 2 + n / 2xi
= (xi + n/xi) / 2。

class Solution {
public:
    bool isPerfectSquare(int num) {
        long long start = num;
        while(start * start > num)
        {
            start = (start + num/start)/2;
        }
        if (start * start == num)
            return true;
        return false;
    }
};

你可能感兴趣的:(C++)