|
楼主 |
发表于 2013-9-6 13:16
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
重新优化了一下,改进如下:- Function NxtPrime(ByVal n&, Optional k& = 1) '次の質数
- Dim b&, c&, f&
- If k = 0 Then NxtPrime = IsPrime(Abs(n)): Exit Function '質数判断
- If k < 0 Then f = -2 Else f = 2
- NxtPrime = n - IIf(n Mod 2, 0, f / 2)
- Do
- NxtPrime = NxtPrime + f: n = Abs(NxtPrime)
- b = 1: c = Int(n ^ 0.5)
- Do While b < c
- b = b + 2: If n Mod b = 0 Then b = 0: Exit Do
- Loop
- If b Or n < 4 Then k = k - f / 2
- Loop Until k = 0
- End Function
- Function IsPrime$(ByVal n&) '質数判断
- If n < 4 Then IsPrime = "素数": Exit Function
- If n Mod 2 Then IsPrime = "素数" Else IsPrime = "合数": Exit Function
- b& = 1: m& = Int(n ^ 0.5)
- Do
- b = b + 2: If n Mod b = 0 Then IsPrime = "合数": Exit Function
- Loop While b < m
- End Function
复制代码 k参数=0 时,判断当前数为素数或合数
【默认】k=1时,返回比当前数大的第1个素数
k=2 时,返回比当前数大的第2个素数
……
k=n 时,返回比当前数大的第n个素数
……
……
k=-1时,返回比当前数小的第1个素数
k=-2时,返回比当前数小的第2个素数
……
k=-n时,返回比当前数小的第n个素数
…………
返回的素数序列中,不包含偶数2,但包含1
|
|