重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
问题不是很简单吗?
成都创新互联是一家专注于成都做网站、网站设计与策划设计,霞山网站建设哪家好?成都创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:霞山等地区。霞山做网站价格咨询:18982081108
判断输入的数,大于等于零,则直接开方;小于零则取绝对值开方再加上字符"i",代码我就不写了.
以下是VB.net自己编的输出N-M范围所有质数的函数,效率很高,1-1000000不到1秒。
VB6.0也可以使用,1.把#Region和括号内的语句都删除
2.把Microsoft.VisualBasic.Right改为Right
3.把Math.Log改为Log
#Region "■ 选质数 | ListPrime"
''' summary
''' 返回整数数组,表示指定自然数区间内的所有质数。
''' /summary
''' param name="头自然数"可选,默认值为1。[Integer类],区间起始的自然数。/param
''' param name="尾自然数"可选,默认值为2。[Integer类],区间结束的自然数,必须大于头自然数。/param
Public Function 选质数(Optional ByVal 头自然数 As Integer = 1, Optional ByVal 尾自然数 As Integer = 2) As Integer()
Dim 质数估计数量 As Integer = Int(尾自然数 * 1.2 / Math.Log(尾自然数))
Dim 质数集合(质数估计数量) As Integer
Dim 序号 As Integer = 0 '已找到质数的个数
Dim 测试数 As Integer
Dim 平方根 As Integer
Dim 测试数增量 As Integer = 4
Dim 尾数 As String
If 尾自然数 头自然数 Then Return Nothing
If 头自然数 6 Then '6以内的质数直接给出
If 头自然数 = 2 Then 质数集合(序号) = 2 : 序号 += 1
If 头自然数 = 3 Then 质数集合(序号) = 3 : 序号 += 1
If 头自然数 = 5 Then 质数集合(序号) = 5 : 序号 += 1
测试数 = 7
Else
测试数 = 头自然数
End If
Do Until 测试数 = 尾自然数
尾数 = Microsoft.VisualBasic.Right(CStr(测试数), 1)
If 尾数 = "5" Then GoTo 跳过 '尾数为5的必然是合数
平方根 = Int(测试数 ^ 0.5)
If 平方根 = 3 Then
For i As Integer = 3 To 平方根 Step 2
If 测试数 Mod i = 0 Then GoTo 跳过
Next
End If
成立:
质数集合(序号) = 测试数
序号 += 1
跳过:
测试数 += 测试数增量
测试数增量 = 6 - 测试数增量 '测试数增量在4和2间变化,只测试6n+1和6n+5
Loop
'按实际找到的质数个数重定义集合
ReDim Preserve 质数集合(序号 - 1)
Return 质数集合
End Function
#End Region
VB的运算顺序是:先乘除、后加减,有括号的先算括号内,有负号的先算负号。
请你比较一下这个运算中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)
这样就会发现,你的代码中括号的位置错了。
正确的应该是: Math.Sqrt((n + 1) / n - 1)