自然数的平方根?

时间:2015-11-17 08:25:43

标签: c++ algorithm

example

root of 1 as 1*sqrt{1}

root of 2 as 1*sqrt{2}

root of 3 as 1*sqrt{3}

root of 9 as 3*sqrt{1}

我试图找到如下算法:

for(i=sqrt(n);i>=1;i--)
if(n%(i*i)==0) {
    break;
}
cout<<i<<' '<<n/(i*i)<<endl;

但是当n是大数时它不好

那么你能告诉我这个问题的算法吗? 非常感谢你!

2 个答案:

答案 0 :(得分:3)

您对代码的期望是什么?对于给定的n,您可以找到其方块除以i的最大数字n。如果n是素数(例如n = 5,17等),则只有i=1才能满足此条件,因此您最终会得到结果{{ 1}}很多时候。

答案 1 :(得分:1)

这个问题没有说明完美/非完美的方块。由于平方根可以是float / double,因此迭代方法是查找根的更精确方法。

此链接可能有所帮助:https://math.stackexchange.com/questions/296102/fastest-square-root-algorithm