| 回复  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 
 |