本文主要是介绍367有效的完全平方数(牛顿迭代法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt。
2、示例
输入:16
输出:True
3、题解
基本思想:牛顿迭代法,f(x)=x^2-N,求f(x)=0时,x的值。初始x=N,不断求x位置的切线与x轴的交点作为新的x,如此反复,直至x^2与N差值小于1,便得到sqrt(N)的整数部分。初始点(x0,x0^2-N),y`=2*x0,得到切线方程y-(x0^2-N)=2*x0(x-x0),当y=0时得x=(x0-N/x0)/2。
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
class Solution {
public:bool isPerfectSquare(int num) {//基本思想:牛顿迭代法,f(x)=x^2-N,求f(x)=0时,x的值。//初始x=N,不断求x位置的切线与x轴的交点作为新的x,如此反复,直至x^2与N差值小于1,便得到sqrt(N)的整数部分//初始(x0,x0^2-N),y`=2*x0,得到切线方程y-(x0^2-N)=2*x0(x-x0),当y=0时得x=(x0-N/x0)/2long long root=num;while(root*root-num>=1){root=(root+num/root)/2;}return root*root==num;}
};
int main()
{Solution solute;int num=16;cout<<solute.isPerfectSquare(num)<<endl;return 0;
}
这篇关于367有效的完全平方数(牛顿迭代法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!