Τις τελευταίες ημέρες, μελετώ την ακόλουθη ερώτηση στο StackExchange σχετικά με μια σπείρα ακέραιων αριθμών. Ψάχνουμε για μια κλειστή φόρμουλα για τις συντεταγμένες του \(n\) στο ακόλουθο ακέραιο σπειροειδές, το οποίο επεκτείνεται από την προέλευση προς τα έξω και όλο και πιο μακριά στο άπειρο:
.. 9 10 11 12
23 8 1 2 13
22 7 0 3 14
21 6 5 4 15
20 19 18 17 16Πρώτα χωρίζουμε τους φυσικούς αριθμούς στις ακόλουθες ομάδες:
$$G_1 = \{ 1,...,8 \}\\G_2 = \{ 9, ..., 24 \}\\G_3 = \{ 25, ... 48 \}\\...\\G_k = \left\{ (2k-1)^2, (2k+1)^2 - 1 \right\}$$
Καλούμε
$$a^2 = \left(\left \lfloor \left( \frac{\left \lfloor \sqrt{n} \right \rfloor + 1}{2} \right) \right \rfloor \cdot 2 - 1 \right)^2$$
τον αρχικό αριθμό σε μια ομάδα.
Σε μια ομάδα υπάρχουν τέσσερις υποομάδες ίσου μεγέθους \(G_1\) για \(G_1\) είναι \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) ). Εάν \(n\) από τη μία υποομάδα στην επόμενη, η κατεύθυνση στη διαδρομή της σπείρας (δεξιόστροφα στο παράδειγμά μας) αλλάζει ταυτόχρονα. Παίρνουμε την τρέχουσα κατεύθυνση \( b \in \{0,1,2,3\} \) διαιρώντας τη θέση \(na^2\) μέσα σε μια ομάδα με τον αριθμό των στοιχείων σε μια υποομάδα:
$$b = \left \lfloor \frac{ n - a^2 }{ \text{abs}\left( a \right) + 1 } \right \rfloor$$
Τώρα μπορούμε να προσδιορίσουμε το πρώτο στοιχείο σε μια υποομάδα \(g_n\) προσθέτοντας ένα πολλαπλάσιο \(b\) του αριθμού \(a+1\) στοιχείων μέσα σε μια ομάδα στον αρχικό αριθμό \(a^2\):
$$c = a^2 + b \cdot (a+1)$$
Τώρα μπορούμε να προσδιορίσουμε με απλή παρατήρηση:
$$x_{right} = \left(n - c - \frac{ a + 1 }{2}+1\right),\, y_{right} = \left(\frac{ a + 1 }{2}\right) \\ x_{bottom} = \left(\frac{ a + 1 }{2}\right),\, y_{bottom} = (-1) \cdot \left( n - c - \frac{ a + 1 }{2}+1\right) \\ x_{left} = (-1) \cdot \left(n - c - \frac{ a + 1 }{2}+1\right),\, y_{left} = (-1) \cdot \left(\frac{ a + 1 }{2}\right) \\ x_{top} = (-1) \cdot \left(\frac{ a + 1 }{2}\right),\, y_{top} = \left( n - c - \frac{ a + 1 }{2}+1\right)$$
Τώρα θέλουμε να αναπαραστήσουμε \(f(n)\) σε κλειστή μορφή και χωρίς διακρίσεις πεζών-κεφαλαίων. Για αυτό, χρησιμοποιούμε τη συνάρτηση signum. Έχω περιγράψει τη διαδικασία εδώ . Για να λάβουμε έναν καθαρό τύπο που εξαρτάται από το \(n\) , παίρνουμε:

Με τη βοήθεια του SVG.js , μπορούμε να δούμε σε αυτήν τη μικρή οπτικοποίηση ότι το όλο πράγμα λειτουργεί πραγματικά:
See the Pen ulam spiral by David Vielhuber (@vielhuber) on CodePen.
Η σπείρα είναι επίσης γνωστή ως σπείρα του Ulam και έχει μια συναρπαστική σχέση με τους πρώτους αριθμούς.