4-روالی بنویسید که عدد دلخواه n را گرفته و n عدد اول را چاپ نماید.
کد:
Module Module1
Sub Main()
Dim i As Long, j As Long, n As Long
Console.Write("Please enter n : ")
n = Val(Console.ReadLine())
j = 1
Do While n > 0
For i = 2 To j - 1
If (j Mod i) = 0 Then Exit For
Next
If i = j Then
Console.WriteLine(j)
n = n - 1
End If
j = j + 1
Loop
Console.ReadKey(True)
End Sub
End Module
ابتدا یک متغیر i برای حلقه تشخیص اول بودن یک عدد و یک متغیر j به عنوان عدد مورد بررسی و یک متغیر
n را دریافت تعداد اعداد اول از کاربر تعریف می کنیم :
کد:
Dim i As Long, j As Long, n As Long
سپس یک پیغام برای دریافت عدد n از کاربر نمایش می دهیم :
کد:
Console.Write("Please enter n : ")
و در ادامه عدد n را از ورودی دریافت می کنیم :
کد:
n = Val(Console.ReadLine())
اولین عددی که برای اول بودن بررسی می کنیم عدد 1 خواهد بود که در j قرار می دهیم، گو اینکه می دانیم
که این عدد اول نخواهد بود.
یک حلقه Do می سازیم تا آنقدر اعداد مختلف را بررسی کند تا n عدد اول پیدا شود، هر بار که یک عدد اول
پیدا شد، از مقدار n یک واحد کم می کنیم، هر گاه n از 0 بزرگتر نبود، n عدد اول پیدا شده و بایستی
حلقه خاتمه یابد :
حلقه ای ایجاد می کنیم که از عدد 2 الی n - 1 را بشمارد، اگر عدد j حداقل بر یکی از این اعداد بخش پذیر باشد،
آنگاه این عدد اول نیست، مثلا عدد 17 اول است، چون بر هیچیک از اعداد 2 الی 16 بخشپذیر نبوده.
از نظر ریاضی بجای j - 1 می توان از جذر j یعنی (Math.Sqrt(j استفاده کرد، ولی j - 1 ساده تر است :
اگر باقیمانده تقسیم عدد j بر i صفر باشد (یعنی j بر i بخشپذیر باشد) آنگاه از حلقه خارج می شویم و
در این حالت عدد j اول نیست :
کد:
If (j Mod i) = 0 Then Exit For
وگرنه به اجرای حلقه ادامه می دهیم :
زمانی که اجرای حلقه تمام شد، می توانیم بر اساس مقدار فعلی i بفهمیم که آیا عدد j اول بوده یا نه،
اگر i برابر j باشد، یعنی حلقه از مقدار 2 الی j - 1 شمرده، ولی j بر هیچکدام بخشپذیر نبوده.
اما اگر i کمتر از j باشد، عدد j بر i بخشپذیر بوده و به همین دلیل از حلقه خارج شده است.
پس ابتدا بررسی می کنیم که آیا i برابر j است (حالتی که عدد j اول بوده) :
در این حالت عدد j را نمایش می دهیم :
و چون عدد اولی را پیدا کردیم از مقدار n یک واحد کم می کنیم :
عدد j بررسی شده، یا عدد اول بوده یا نبوده، ولی به هر حال نوبت آن است که عدد بعدی بررسی شود،
پس به مقدار j یک واحد اضافه می کنیم :
اجرای حلقه Do تا زمانی باید تکرار شود که n به صفر برسد و از حلقه خارج شویم :
و در خاتمه منتظر فشار کلیدی توسط کاربر می شویم :