# Ulam's Spiral with Oppermann's Diagonals (quarter-squares)

First we craft a function to return the quadrant boundary based on Oppermann's Conjecture

a[n_] := (Mod[n, 2] + n^2 + 2 n)/4


Then we create a few lists

r = 10;
q = 1;
q1 = Table[a[q + 4 (n - 1)] <-> a[q + 4 (n)], {n, 1, r}];
q = 2;
q2 = Table[a[q + 4 (n - 1)] <-> a[q + 4 (n)], {n, 1, r}];
q = 3;
q3 = Table[a[q + 4 (n - 1)] <-> a[q + 4 (n)], {n, 1, r}];
q = 4;
q4 = Table[a[q + 4 (n - 1)] <-> a[q + 4 (n)], {n, 1, r}];
u = Flatten[Table[{(n - 1) <-> n}, {n, 2, a[4 + 4 r] + 1}]];


We produce the normal Ulam's Spiral

Graph[u] We don't get the spiral when we attempt to combine the diagonal lists by using this

Graph[Union[u, q1, q2, q3, q4]] How can we overlay the diagonals onto the spiral?

• Honestly, I'm quite surprised that Graph[u] produces a spiral! None of the built-in layout methods give this specific layout. It must be treating this graph as a special case. – Szabolcs May 30 '12 at 10:57
• I have linked from here math.stackexchange.com/questions/151902/… – Fred Kline May 31 '12 at 6:42

Starting with Graph[u] you can extract the coordinates of the vertices as follows

gr = Graph[u];
crds = AbsoluteOptions[gr, VertexCoordinates];


The graph including the diagonals can then be drawn according to

Graph[VertexList[gr], Union[u, q1, q2, q3, q4], crds] • And I was silly enough to sit down and figure out a closed form for the vertex coordinate based on the index ... of course just extract them! – Szabolcs May 30 '12 at 11:16

You can also use GraphEmbedding to get the vertex coordinates:

Graph[VertexList[g = Graph[u]], Union[u, q1, q2, q3, q4],
VertexCoordinates -> GraphEmbedding[g]] 