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

12

1

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?

2Honestly, 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 – 2012-05-30T10:57:39.033

– Fred Kline – 2012-05-31T06:42:23.217

15

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]


2And 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 – 2012-05-30T11:16:52.660

3

You can also use GraphEmbedding to get the vertex coordinates:

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