回复 happytc
happytc兄很牛啊.
呵呵,这钱给得值.
3mile 发表于 2012-10-30 17:24
呵,一般这类计算,就是要“不计算”效率才高,只要一计算,无论你修改多好的算法,都会随着着N的增大,时间复杂度和空间复杂度都会正比例增大(还好,不是几何级数增涨)。
象下面这种,就耗时了
$iMaxNum = 1000000
$hInit = TimerInit()
$sPrimes = PrimeNumCalc($iMaxNum)
$iTimer = TimerDiff($hInit)
MsgBox(0,"计算耗时", "计算" & $iMaxNum & "内的所有素数共耗时:" & $iTimer & " 毫秒")
MsgBox(0,"素数",$sPrimes)
Func PrimeNumCalc($iN)
Local $p[$iN + 1], $i, $j, $z, $n
For $z = 3 To $iN Step 2
$p[$z] = 1
Next
For $i = 3 To Sqrt($iN) Step 2
If $p[$i] And Mod($p[$i], 2) Then
For $j = $i * $i To $iN Step $i
$p[$j] = 0
Next
$n &= $i & " "
EndIf
Next
If Not Mod($i, 2) Then $i += 1
For $z = $i To $iN Step 2
If $p[$z] Then $n &= $z & " "
Next
Return "2 " & $n
EndFunc
|