Τις τελευταίες ημέρες, μελετώ την ακόλουθη ερώτηση στο 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 και έχει μια συναρπαστική σχέση με τους πρώτους αριθμούς.