How to resolve the algorithm Ulam spiral (for primes) step by step in the VBScript programming language
How to resolve the algorithm Ulam spiral (for primes) step by step in the VBScript programming language
Table of Contents
Problem Statement
An Ulam spiral (of primes) is a method of visualizing primes when expressed in a (normally counter-clockwise) outward spiral (usually starting at 1), constructed on a square grid, starting at the "center".
An Ulam spiral is also known as a prime spiral.
The first grid (green) is shown with sequential integers, starting at 1.
In an Ulam spiral of primes, only the primes are shown (usually indicated by some glyph such as a dot or asterisk), and all non-primes as shown as a blank (or some other whitespace).
Of course, the grid and border are not to be displayed (but they are displayed here when using these Wiki HTML tables).
Normally, the spiral starts in the "center", and the 2nd number is to the viewer's right and the number spiral starts from there in a counter-clockwise direction.
There are other geometric shapes that are used as well, including clock-wise spirals.
Also, some spirals (for the 2nd number) is viewed upwards from the 1st number instead of to the right, but that is just a matter of orientation.
Sometimes, the starting number can be specified to show more visual striking patterns (of prime densities).
[A larger than necessary grid (numbers wise) is shown here to illustrate the pattern of numbers on the diagonals (which may be used by the method to orientate the direction of spiral-construction algorithm within the example computer programs)].
Then, in the next phase in the transformation of the Ulam prime spiral, the non-primes are translated to blanks.
In the orange grid below, the primes are left intact, and all non-primes are changed to blanks.
Then, in the final transformation of the Ulam spiral (the yellow grid), translate the primes to a glyph such as a • or some other suitable glyph.
The Ulam spiral becomes more visually obvious as the grid increases in size.
For any sized N × N grid, construct and show an Ulam spiral (counter-clockwise) of primes starting at some specified initial number (the default would be 1), with some suitably dotty (glyph) representation to indicate primes, and the absence of dots to indicate non-primes.
You should demonstrate the generator by showing at Ulam prime spiral large enough to (almost) fill your terminal screen.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Ulam spiral (for primes) step by step in the VBScript programming language
Source code in the vbscript programming language
Function build_spiral(n)
'declare a two dimentional array
Dim matrix()
ReDim matrix(n-1,n-1)
'determine starting point
x = (n-1)/2 : y = (n-1)/2
'set the initial iterations
x_max = 1 : y_max = 1 : count = 1
'set initial direction
dir = "R"
'populate the array
For i = 1 To n*n
l = Len(n*n)
If IsPrime(i) Then
matrix(x,y) = Right("000" & i,l)
Else
matrix(x,y) = String(l,"-")
End If
Select Case dir
Case "R"
If x_max > 0 Then
x = x + 1 : x_max = x_max - 1
Else
dir = "U" : y_max = count
y = y - 1 : y_max = y_max - 1
End If
Case "U"
If y_max > 0 Then
y = y - 1 : y_max = y_max - 1
Else
dir = "L" : count = count + 1 : x_max = count
x = x - 1 : x_max = x_max - 1
End If
Case "L"
If x_max > 0 Then
x = x - 1 : x_max = x_max - 1
Else
dir = "D" : y_max = count
y = y + 1 : y_max = y_max - 1
End If
Case "D"
If y_max > 0 Then
y = y + 1 : y_max = y_max - 1
Else
dir = "R" : count = count + 1 : x_max = count
x = x + 1 : x_max = x_max - 1
End If
End Select
Next
'print the matrix
For y = 0 To n - 1
For x = 0 To n - 1
If x = n - 1 Then
WScript.StdOut.Write matrix(x,y)
Else
WScript.StdOut.Write matrix(x,y) & vbTab
End If
Next
WScript.StdOut.WriteLine
Next
End Function
Function IsPrime(n)
If n = 2 Then
IsPrime = True
ElseIf n <= 1 Or n Mod 2 = 0 Then
IsPrime = False
Else
IsPrime = True
For i = 3 To Int(Sqr(n)) Step 2
If n Mod i = 0 Then
IsPrime = False
Exit For
End If
Next
End If
End Function
'test with 9
build_spiral(9)
You may also check:How to resolve the algorithm Van der Corput sequence step by step in the 360 Assembly programming language
You may also check:How to resolve the algorithm 24 game/Solve step by step in the C programming language
You may also check:How to resolve the algorithm Arithmetic/Integer step by step in the EasyLang programming language
You may also check:How to resolve the algorithm Command-line arguments step by step in the Phix programming language
You may also check:How to resolve the algorithm Fortunate numbers step by step in the Raku programming language