問題不是很簡單嗎?
成都創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),霞山網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:霞山等地區(qū)。霞山做網(wǎng)站價(jià)格咨詢:18982081108
判斷輸入的數(shù),大于等于零,則直接開方;小于零則取絕對(duì)值開方再加上字符"i",代碼我就不寫了.
以下是VB.net自己編的輸出N-M范圍所有質(zhì)數(shù)的函數(shù),效率很高,1-1000000不到1秒。
VB6.0也可以使用,1.把#Region和括號(hào)內(nèi)的語句都刪除
2.把Microsoft.VisualBasic.Right改為Right
3.把Math.Log改為Log
#Region "■ 選質(zhì)數(shù) | ListPrime"
''' summary
''' 返回整數(shù)數(shù)組,表示指定自然數(shù)區(qū)間內(nèi)的所有質(zhì)數(shù)。
''' /summary
''' param name="頭自然數(shù)"可選,默認(rèn)值為1。[Integer類],區(qū)間起始的自然數(shù)。/param
''' param name="尾自然數(shù)"可選,默認(rèn)值為2。[Integer類],區(qū)間結(jié)束的自然數(shù),必須大于頭自然數(shù)。/param
Public Function 選質(zhì)數(shù)(Optional ByVal 頭自然數(shù) As Integer = 1, Optional ByVal 尾自然數(shù) As Integer = 2) As Integer()
Dim 質(zhì)數(shù)估計(jì)數(shù)量 As Integer = Int(尾自然數(shù) * 1.2 / Math.Log(尾自然數(shù)))
Dim 質(zhì)數(shù)集合(質(zhì)數(shù)估計(jì)數(shù)量) As Integer
Dim 序號(hào) As Integer = 0 '已找到質(zhì)數(shù)的個(gè)數(shù)
Dim 測(cè)試數(shù) As Integer
Dim 平方根 As Integer
Dim 測(cè)試數(shù)增量 As Integer = 4
Dim 尾數(shù) As String
If 尾自然數(shù) 頭自然數(shù) Then Return Nothing
If 頭自然數(shù) 6 Then '6以內(nèi)的質(zhì)數(shù)直接給出
If 頭自然數(shù) = 2 Then 質(zhì)數(shù)集合(序號(hào)) = 2 : 序號(hào) += 1
If 頭自然數(shù) = 3 Then 質(zhì)數(shù)集合(序號(hào)) = 3 : 序號(hào) += 1
If 頭自然數(shù) = 5 Then 質(zhì)數(shù)集合(序號(hào)) = 5 : 序號(hào) += 1
測(cè)試數(shù) = 7
Else
測(cè)試數(shù) = 頭自然數(shù)
End If
Do Until 測(cè)試數(shù) = 尾自然數(shù)
尾數(shù) = Microsoft.VisualBasic.Right(CStr(測(cè)試數(shù)), 1)
If 尾數(shù) = "5" Then GoTo 跳過 '尾數(shù)為5的必然是合數(shù)
平方根 = Int(測(cè)試數(shù) ^ 0.5)
If 平方根 = 3 Then
For i As Integer = 3 To 平方根 Step 2
If 測(cè)試數(shù) Mod i = 0 Then GoTo 跳過
Next
End If
成立:
質(zhì)數(shù)集合(序號(hào)) = 測(cè)試數(shù)
序號(hào) += 1
跳過:
測(cè)試數(shù) += 測(cè)試數(shù)增量
測(cè)試數(shù)增量 = 6 - 測(cè)試數(shù)增量 '測(cè)試數(shù)增量在4和2間變化,只測(cè)試6n+1和6n+5
Loop
'按實(shí)際找到的質(zhì)數(shù)個(gè)數(shù)重定義集合
ReDim Preserve 質(zhì)數(shù)集合(序號(hào) - 1)
Return 質(zhì)數(shù)集合
End Function
#End Region
VB的運(yùn)算順序是:先乘除、后加減,有括號(hào)的先算括號(hào)內(nèi),有負(fù)號(hào)的先算負(fù)號(hào)。
請(qǐng)你比較一下這個(gè)運(yùn)算中x和y的值:
Dim n As Single = 4
Dim x As Single
Dim y As Single
x = n + 1
x = x / n
x = x - 1
x = Math.Sqrt(x)
y = Math.Sqrt((n + 1) / n - 1)
這樣就會(huì)發(fā)現(xiàn),你的代碼中括號(hào)的位置錯(cuò)了。
正確的應(yīng)該是: Math.Sqrt((n + 1) / n - 1)