平方根

1.平方根(sqrt.pas/c/cpp)

【问题描述】

给出一个正整数n (1<n≤2^31-1),求当x,y都为正整数时,方程 的解中,x最小值为多少?

√n=√x-√y

【输入文件】

输入文件只有一行,一个正整数n。

【输出文件】

输出文件只有一行,即满足条件的最小x的值。

【文件样例】

sqrt.in        sqrt.out

4                 9

【数据规模】

30%的数据满足1<n≤10000;

100%的数据满足1<n≤2^31-1。

采用极限法

根n=(1+x)根n-x根n

即n=((p+x)/p)根n-x/p根n

上下同除x,然后换元,

n=((t+1)/t)根n-1/t根n

y=n/(t*t);

因为y是整数,t从根n下取整,然后直到n%(t*t)==0,求出t结果也就出来了。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int n;
    cin>>n;
    long long p;
    for(p=sqrt(n);p>=1;p--) if(n%(p*p)==0)break;
    long long ans=n*(p+1)*(p+1)/(p*p);
    cout<<ans;
    return 0;
}
时间: 2024-10-12 12:35:28

平方根的相关文章

牛顿迭代法求解平方根

牛顿迭代法求解平方根 2015-05-16 10:30 2492人阅读 评论(1) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一个实例 迭代简介 牛顿迭代法 牛顿迭代法简介 简单推导 泰勒公式推导 延伸与应用 一个实例 //java实现的sqrt类和方法 public class sqrt { public static double sqrt(double n) { if (n<0) return Double.NaN; double err = 1e

计蒜课_二分法求平方根

教训:代码一直通不过的也许因为数据类型(在本题中int改为long),而不是逻辑问题: 代码如下: 1 #include<iostream> 2 using std::endl; 3 using std::cout; 4 using std::cin; 5 inline bool isRes(long x,long y){//判断 x是否为y的平方根: 6 return (x*x==y)||((x*x<y)&&((x+1)*(x+1)>y)); 7 } 8 int

经典算法:牛顿迭代法求平方根

//牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/(2*x); 7 y = x*x-num; 8 if(y<0) y = -y; 9 } while(y>0.0001); 10 return x; 11 } 12 int main(int argc, char* argv[]) 13 { 14 printf("%.3f",my

牛顿迭代法是如何求平方根的

看<SICP>,提到牛顿迭代(Newton's method)求平发根,有一些想法,记下来 比如给出的数字是 y假设其平方根为 gy 猜想一个数字 x 如果 x==gy,那 y/x==gy 下面重点来了,如果 x!=gy 可能 x<gy,y/x>gy 或者 x>gy,y/x<gy 一大一小,故 (x+y/x)/2 比 x 更接近 gy不断迭代…… --date: 2014-12-22

求平方根的倒数速算法--向卡马克等人致敬

昨日,风雨交加,气温骤降,所有人都蜷缩在不暖和的厚衣服里,无神的盯着显示器.我也不例外,颤抖的手点击着鼠标,一边埋怨这天气,一边埋怨这电脑.突然,一段代码映入眼帘,定睛一看,没看懂,代码是这样的: float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // 这TM是啥 i = 0

Project Euler 80:Square root digital expansion 平方根数字展开

Square root digital expansion It is well known that if the square root of a natural number is not an integer, then it is irrational. The decimal expansion of such square roots is infinite without any repeating pattern at all. The square root of two i

手算平方根

有些丧心病狂的数学题目要求平方根..大概值没给出做精确到某一位..于是我机智地用牛顿迭代233...(话说我pi背到一百多位真是蛋疼..) 例:求$\sqrt{18}$: Initial guess: 4 //4*4=16x = 4x = (4 + 18 / 4)/2 = 4.25x = (x + 18 / x)/2 ~ 4.242647x - (x + 18 / x)/2 ~ 4.242641 //差不多了233 -----------一个相当接近sqrt(17)的分数-----------8

如何用牛顿法求一个数的平方根

SCIP 1.1.7的一个练习. 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要.方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根.牛顿迭代法老品牌娱乐城是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以

平方根(sqrt)算法

最近听说开平方算法挺难写,自己思考一下确实这些库函数只是一直在用,但是很少去思考如何实现的,sqrt在排序中使用频率非常的高,所以就研究了一下.大概有三种实现方式. 一.用二分的方法 每次用中间数就试,如果大就到左区间选取中间数试,如果小就到右区间找中间数试,采用不断逼近的方式计算平方根,这种方式迭代次数有点多,且每次试验都要进行运算,效率不是很高,但是思路简单,巧妙的运用了二分的方法. #define eps 0.00000001 float SqrtByBisection(float n)

手算平方根的正确方法

手算平方根的「正确」方法,是什么方法?如果你认为是牛顿迭代法的话,你可以亲自试一下,看看效果如何: (原帖 kz3007407872, 鉴于百度贴吧的帖子是公开的,我就不打码了) 其实牛顿迭代法非常好,在电脑上快得飞起.但是手算就不行了. 那么「正确」的方法是什么呢?是这个: (原帖同上) 说得神神叨叨的,还能开无限小数,到底是什么方法?帖子里没说. 不过,幸运的是,我有一天翻 Wiki 的时候,碰巧翻到了这个方法.本文将详细介绍这个方法. \(2\) 的算术平方根是多少?是 \(\sqrt{2