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是大数时它不好
那么你能告诉我这个问题的算法吗? 非常感谢你!
答案 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