Génération d'une spirale d'Ulam - Mathematica Stack échange

Une spirale d'Ulam est tout à fait une construction intéressante, révélant des caractéristiques inattendues dans la distribution des nombres premiers.

J'ai créé une mise en œuvre plus rapide, mais je crois qu'il peut certainement être accélérée:







Génération d'une spirale d'Ulam - Mathematica Stack échange

Cela est suffisant pour mes besoins, et je n'ai pas le temps de se concentrer sur ce moment, cependant, il pourrait être intéressant pour les futurs visiteurs, la question est de savoir comment le rendre plus rapide en améliorant / réécriture.

a demandé le 9 juin '14 à 14h17

La fonction findPrimePosInBoundarys ci-dessous découvre les nombres premiers qui sont sur place qui et où ils sont sur des carrés. La coordonnée est juste un nombre entier et pour la couche = 3. Les coordonnées indiquent les positions suivantes.

Il le fait pour chaque couche<=layers

Voici une fonction compilée. Compte tenu des positions sur la place, et qui couche nous travaillons, il transforme cette position entière en une coordonnée.







La fonction ci-dessous établit la fonction compilée sur les couches

Voici une fonction pour afficher le résultat

Génération d'une spirale d'Ulam - Mathematica Stack échange

Pour une plus grande valeur de couches. nous avons

Voici ma version en utilisant au lieu de Joignez-vous à Insérer pour construire la spirale des nombres. Par mes mesures, il est la méthode la plus rapide pour la spirale plus petite de 200 couches, en prenant seulement 0,025 secondes à terminer, par rapport à 0,046 avec le code et 0,055 avec le code de Jacob Kuba. Mais la solution de Jacob gagne haut la main sur la spirale plus grande avec 1001 couches. Ce test prend seulement 1,14 secondes pour le code de Jacob alors qu'il faut 56 secondes pour le mien et 115 secondes pour Kuba de.

Voici un test avec autant de couches que dans l'exemple de Kuba (la visualisation est avec une couche plus).

Génération d'une spirale d'Ulam - Mathematica Stack échange

(En aparté pour les futurs visiteurs:.. // image // ColorNegate est plus rapide que ArrayPlot si vous voulez optimiser tous les aspects du problème)

Une amélioration de mon code que je sais, mais n'a pas appliqué que Range peut la liste des numéros dans l'ordre inverse en ayant une taille de pas négative. Cela pourrait être utilisé au lieu de marche arrière.

répondit le 9 juin '14 à 22h41







Articles Liés