2014-10-07 74 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