素数的快速列举
来源:互联网 发布:unity3d 如何导入动画 编辑:程序博客网 时间:2024/06/11 07:09
好久没来这里了。最近看了一些数论方面的文章,受益匪浅。想到我们初学VB时,利用循环查找素数是必修之课,随手写了两段列举素数的代码,并详细注释。自己感觉还是比较快的。 代码如下:
'*******************************************************************************
' Target:to get all prime numbers smaller than a certain number
' Author:northwolves
' Reference:"Sieve of Eratosthenes"
' Createdate:2005-04-18 00:00:00
'*******************************************************************************
Sub showprime1(ByVal max As Long) 'find all prime numbers smaller than max(max>=3)
Dim p() As Long, i As Long, j As Long, number As Long, sqrtmax As Long, beprime As Boolean 'difinations
number = 1
ReDim p(1 To number)
p(1) = 2 ' the unique even prime number
Debug.Print p(1) 'show the first prime number
If max < 3 Then Exit Sub 'since we want do something
For i = 3 To max Step 2 ' skip those even number
sqrtmax = Int(Sqr(i)) + 1 'get the largest non-self factor of i
beprime = True ' init
For j = 1 To number ' try all primer numbers we have found before.
If i Mod p(j) = 0 Then beprime = False: Exit For 'not a prime number
If p(j) > sqrtmax Then Exit For 'unless we'll waste our time
Next
If beprime = True Then ' then it is a prime number
number = number + 1 'add to it's count
ReDim Preserve p(1 To number) 'define again
p(number) = i
Debug.Print i ' output the prime number
End If
Next
Debug.Print "There are " & number & " prime numbers below " & max ' show some message
End Sub
Private Sub Command1_Click() ' show all prime numbers smaller than 100000
showprime1 100000
End Sub
'************************************************************************
' Target:to get the first n prime numbers from 2,3,....
' Author:northwolves
' Reference:"Sieve of Eratosthenes"
' Createdate:2005-04-18 00:00:00
'************************************************************************
Sub showprime2(ByVal n As Long) ' get the first n(n>1) prime numbers
Dim p() As Long, i As Long, j As Long, number As Long, sqrtmax As Long, beprime As Boolean
number = 1
ReDim p(1 To number)
p(1) = 2 ' the unique even prime number
Debug.Print 2 'show the first prime number
If n < 2 Then Exit Sub 'since we want do something
i = 3
Do While number <= n
sqrtmax = Int(Sqr(i)) + 1 'get the largest non-self factor of max
beprime = True ' init
For j = 1 To number ' try all primer numbers we have found before.
If i Mod p(j) = 0 Then beprime = False: Exit For 'not a prime number
If p(j) > sqrtmax Then Exit For 'unless we'll waste our time
Next
If beprime = True Then ' then it is a prime number
number = number + 1 'add to it's count
ReDim Preserve p(1 To number) 'define again
p(number) = i
Debug.Print i ' output the prime number
End If
i = i + 2 ' skip those even number
Loop
Debug.Print "The " & n & " prime Number Is " & p(number); "" ' show some message
End Sub
Private Sub Command2_Click() ' show the first 1000 prime numbers
showprime2 1000
End Sub
- 素数的快速列举
- 素数的快速列举(二)
- 素数的快速列举(三)
- 素数筛实现素数的快速筛选
- 快速判断素数的方法
- 快速的素数打表
- 快速素数判断的方法
- 快速素数判断的方法
- 利用素数表快速寻找 n 以内的所有素数
- 利用素数表快速寻找 n 以内的所有素数
- 条码的应用列举
- 列举 所有的 culture
- 列举数据库的大小
- 一个快速法求素数的程序
- 一种快速的素数筛法
- 快速求小于N的所有素数
- 快速找出N以内的素数
- 简单快速打印100以内的素数
- 一周七天
- 用跨进程子类化技术实现对其它进程消息的拦载
- 在其它进程中建立线程
- 用DELPHI开发DirectX游戏
- Windows 系统编程初探 (三)栈(Stack)的奥秘
- 素数的快速列举
- Windows 系统编程初探 (四)结构化异常处理之一:SEH的基本原理与进程相关异常处理
- 卖qb
- 去常州耍了两天,好幸福哟
- 用Java实现回调例程[选择自 chensheng913 的 Blog]
- 近日关注:An XP Team Room
- 用了12个小时完成一个计算器小作业
- 用Java实现回调例程
- vmware下将RH9内核升级至2.6