2014-10-07 70 views
0

在下面的循环:显示质数通过循环

while (j <= number/2) 

什么是需要由2分多少? 它会影响构建程序或运行时的运行时间吗?

+0

这只是说,虽然j小于或等于有数字... – WMios 2014-10-07 06:17:27

回答

1

如果这个条件是从测试如果number是素数的方法服用,应该只有当它用数字j这样j <= Math.sqrt(number) divisable测试,所以j <= number/2是矫枉过正。不过,它比测试所有j <= number的性能更好。

+2

我会说这是一个不足之处 – Bohemian 2014-10-07 06:18:04

+0

@Bohemian是吗?如果你做的工作比你应该做的多,是不是被认为是矫枉过正? – Eran 2014-10-07 06:19:18

+0

由于退出条件测试是_under_whelming,因此您正在做的工作比您应该做的要多。 – Thilo 2014-10-07 06:22:20

1

是的,它将运行时间减半(*)。

您不需要检查大于您的号码一半的号码。他们不会是因素。

虽然这是一个非常松散的上限。你可以更早地停下来(在平方根上:将会有比平方根更大的因子,但是你已经通过这对的另一个因子找到了)。

(*)如果您只在循环顶部计算number/2一次,也就是说。如果在每次迭代中重复计算它,则会再次浪费相当多的储蓄。

+0

“浪费相当多”:虽然2分区比其他分区快。但仍然... – Thilo 2014-10-07 06:24:42