Kod:
Option Explicit
Public Sub AsalSayilariBul()
Dim baslangic As Date
Dim bitis As Date
Dim AsalSayilar() As Long
Dim m As Long
Dim Num As Long
baslangic = Now
Num = 1000000
Sayfa1.UsedRange.ClearContents
AsallariBul Num, AsalSayilar
Sayfa1.Range("A2").Resize(UBound(AsalSayilar), 1) = AsalSayilar()
bitis = Now
Debug.Print Format(bitis - baslangic, "hh:mm:ss")
End Sub
Private Sub AsallariBul(AsalSayisi As Long, AsalSayilar() As Long)
Dim adayAsal As Long
Dim idAsal As Long
Dim faktor As Long
Dim i As Long
Dim isAsal As Boolean
ReDim AsalSayilar(1 To AsalSayisi, 1 To 1)
AsalSayilar(1, 1) = 2: AsalSayilar(2, 1) = 3
idAsal = 3: adayAsal = 3
Do While idAsal <= AsalSayisi
adayAsal = adayAsal + 2
i = 2: isAsal = True
Do
faktor = adayAsal / AsalSayilar(i, 1)
If faktor < AsalSayilar(i, 1) Then Exit Do
If faktor * AsalSayilar(i, 1) = adayAsal Then isAsal = False: Exit Do
i = i + 1
Loop
If isAsal Then AsalSayilar(idAsal, 1) = adayAsal: idAsal = idAsal + 1
Loop
End Sub
Tek veya iki boyutlu bir diziyi sayfaya yazdırırken kesinlikle iki boyutlu dizi tanımlaması yapmak gerekir; aksi halde sayfaya sadece dizinin ilk elemanı yazdırılır.
ReDim AsalSayilar(1 To AsalSayisi, 1 To 1)
Diziye veri yazdırılırken bu şekilde tanımlama yapılmalıdır.
AsalSayilar(i, 1) = degisken
Hiç yorum yok:
Yorum Gönder