我只是在查看质数的一些算法并且遇到了这个:
for(int i=2;i*i <= n;i++)
{/*assume no operations here*/}
我只是想知道上面的循环是否会比以下更快?
int x=sqrt(n);
for(int i=2;i<=x;i++)
{/*nop*/}
答案 0 :(得分:3)
当然,这取决于n
的值。无论如何,sqrt()
无法保证为您提供正确的结果:由于四舍五入的原因,您最终可能会得到x
的值,这比预期值少一个并且会破坏算法。我不会去进行微观优化,而是坚持正确性并使用原始版本,这样可以保证产生正确的结果。