[concours] qui sera premier ?

Répondre
Partager Rechercher
Histoire de réveiller les instincts de compétition des scripteurs du forum je vous propose un petit concours avec un grand classique du genre, performance de calcul de nombres premiers.

Prix: 2500l$ (peut etre plus si certains veulent ajouter au pot)

Objectif: Calculer les 10000 premiers nombre premier avec la meilleur performance de temps

Contraintes:
- Un seul événement, tout se passe dans le state entry (on peut faire des fonctions)
- On affiche le temps d'exécution du script à la fin du traitement
- Les nombres ne seront pas intégralement stocké en dur dans le script, toutes fois on peut en mettre quelques uns pour amorcer la pompe
- Utilisation de un seul et unique script, pas de parallélisme

Vous avez 15 jours soit le 21/09 comme date butoir pour m'envoyer vos script en MP

et pour le fun postez ici votre temps d'exécution
hooo, ca me tente bien ce petit concours ^^

au fait, histoire de mettre tout le monde d'accord : 1 n'est pas premier.

de plus, même si on peut "amorcer la pompe" avec quelques nombres premiers, il faudrait limiter à 2 ou 3, sinon on simplifie énormément la duree en stockant en dur les nombres premiers jusqu'a racine(1000), soit jusqu'à 31. 1000 devrait être un paramètre modifiable, histoire de se concentrer sur l'algo et l'optimisation... C'est juste une remarque, Magic verra bien les algos qui trichent ou pas.

A vue de nez, les temps d'exécution de Mingyar m'ont l'air excellents.
Pour le moment sur une sandbox pas vide avec des scripts autour et des builds :

Citation :
[11:35] Object: 1.938428
[11:35] Object: 1.913173
[11:35] Object: 1.924075
[11:35] Object: 1.946358
[11:35] Object: 1.964733
[11:35] Object: 1.939514
[11:35] Object: 1.914296
[11:35] Object: 1.997223
[11:35] Object: 1.983885
[11:35] Object: 1.958323
[11:35] Object: 1.972610
[11:35] Object: 2.181890
[11:35] Object: 1.995726
Sur une sim presque vide mais avec une script time de 3.5 ms quand meme :

Citation :
[11:39] youp: 1.876313
[11:40] youp: 1.778353
[11:40] youp: 1.805768
[11:40] youp: 1.849263
[11:40] youp: 1.868019
[11:40] youp: 1.870875
[11:40] youp: 1.763052
[11:40] youp: 1.807309
[11:40] youp: 1.874785
[11:40] youp: 1.904179
barbidule, pas de soucis, je pense que la plus part des personnes ici ont très bien comprit ma limitation à quelques uns.
Parcontre si je peux te reprendre sur ton raisonnement... c'est pas les nombres premier jusqu'a mille, mais les mille premier nombres premier. Ce qui implique d'en stocké 89 et non pas 31.
Mais 31 comme 89 et on est largement au dessus des quelques uns


Sinon good news, une bonne fée a rajouté 1000L$. Merci à elle
Salut

Apprenti scripteur, je ne suis pas encore capable de faire cela ...
Mais j'ai envie de voir jusqu'où vous êtes capable de faire ^^



et bang 500l$ en plus eu faut faire un script pour calculer combien ça fait ?
Rajouter des valeurs ne fera que creuser l'écart car la complexité d'un algorithme suit une tendance approximative ... cela peut etre polynomial, logarithmique, exponentiel voir un mix de ces tendances .....

Allons pour 10 000 mais je ne pourrai faire mes tests que après demain.
Citation :
Publié par Magic Cat
Parcontre si je peux te reprendre sur ton raisonnement... c'est pas les nombres premier jusqu'a mille, mais les mille premier nombres premier. Ce qui implique d'en stocké 89 et non pas 31.
quelle truffe je suis! bon ben ca va au moins m'éviter de me couvrir de ridicule en faisant un script HS. (je trouverai d'autre moyens d'être ridicule! )

tout a fait d'accord pour passer à 10000, ca compensera les problèmes de lags, pas se départager au 100ème de seconde, toussa...
Citation :
Publié par Barbidule McBride
ca compensera les problèmes de lags, pas se départager au 100ème de seconde, toussa...
Désolé de te décevoir mais quand t'as un retard sur chaque itération a cause du lag et que tu cumules tes retards dans un script ... plus tu fais d'itérations et plus le lag joue un role important .....
Citation :
Publié par Ahuri Serenity
Désolé de te décevoir mais quand t'as un retard sur chaque itération a cause du lag et que tu cumules tes retards dans un script ... plus tu fais d'itérations et plus le lag joue un role important .....
oui mais bon, plus c'est long et plus c'est bon.. heu... en fait si ca dure plus longtemps que les 2 ou 3 secondes vues pour l'instant, statistiquement on aura plus de chances d'avoir le même lag moyen. sinon on peut départager sur une opensim en local?

de toute faççon, en montant à 10000 on verra facilement les algos se départager, et à algo identique, on regardera l'optimisation. Le lag ne devrait pas trop intervenir en fait
Félicitation mingyar

Citation :
Publié par le poilu
À 10 000 nombres premiers, plus possible de tous les stocker.
Donc, pour valider l'algorithme, j'affiche le 10 000e trouvé, soit : 104729.
Bon je valide qu'il n'est plus nécessaire de stocker, de toute façon c'est pas le plus intéressant

Citation :
Publié par le poilu
Algorithme légèrement optimisé, avec une liste pré-initialisée des 4 premiers nombres premiers : 2, 3, 5 et 7.
Tu vois barbidule pour moi ca c'est quelques uns
grmblblbl, je savais bien que j'arriverai à me ridiculiser d'une autre façon...
Avec l'algo basique (le crible, erasthotène ou un nom approchant je crois...) sans stockage ni affichage, tout 1er essai pour voir, j'arrive à 73 secondes

même si j'optimise, je doute que mon terrain laggy explique cette durée à lui tout seul.

Je soupçonne un peu de RL la dedans, genre cours de crypto ou boulot, avec un algo pas classique, en fouillant un peu il y a pleins d'algos assez délirants (probabilistes, algo KAS très récent...). J'espère ne pas avoir à implémenter une de ces méthodes.

D'autre part - judicieuse remarque du sus-surnommé le poilu ^^, la mémoire empêche de tout stocker. On peut alors optimiser (le crible standard du grec) en s'arretant de stocker les nombres premiers des qu'on dépasse la racine du 10000ème; mais cela suppose un peu de connaitre déjà la réponse à la question non? (c.a.d que l'on ne divise que par les nombres premiers < 324 et qu'on n'en stocke que 66 du coup, c'est un peu tricher non?)

Même en faisant cela, je n'ose pas vous dire combien de temps ca met tellement j'ai honte! (50sec...) ca doit pas être le crible votre truc, je crains l'algo ébouriffant...

edit : ouf! en allant ailleurs (moins laggy), je descend à 16 secondes, ca me rassure un peu ^^ apluka optimiser
edit2 : l'horreur dans tout ça, c'est que chez moi c'est aussi laggy que le bac a sable de france3d (55 secondes la bas), mes voisins doivent m'adorer! (promis je ferai du ménage, j'ai envie de tout refaire, pas taper gentils voisins ^^...)


Citation :
Publié par Ahuri Serenity
J'ai hate de voir vos versions de code ... il y a tellement de manières de calculer ca ....

Au fait si le state_entry fait un llHTTPRequest vers un serveur relié aux supercalculateurs du CEA ca compte ????
Oui, sauf si le temps de connexion fait moins de 16 secondes
ca me rassure, avec 16 secondes non optimisées je reste dans la course

Pour les puristes (ou plutôt extrémistes!), il y a une implémentation de l'algo AKS en c++ sur le net. Ca m'a l'air traduisible en lsl sans grosses modifs (on n'a pas besoin de bibliothèque de grand nombres entiers ici), mais piocher ce genre d'algo incompréhensible pour le commun des mortels ne doit pas être l'objet du concours.

j'avais un lien pdf, pour ceux qui aiment la poésie des maths même si c'est incompréhensible, http://www.cse.iitk.ac.in/news/primality.pdf, pour la démonstration de l'algo AKS qui semble être le seul "prouvé", mais la page bloque... On pourra toujours regarder http://en.wikipedia.org/wiki/AKS_primality_test
(il paraitrait qu'un algo ECPP serait plus rapide, cf http://www.lix.polytechnique.fr/Labo...rain/aks-f.pdf qui est très jolie avec tous ces symboles mathématiques partout mais bon, ces trucs là c'est pour les très grands nombres premiers, pas pour nos 10000 petits premiers)

Il y a d'autres algos, mais qui ne sont pas complètement corrects, certains sont probabilistes, ils disent qu'un nombre a de très grande chance d'être premier (utilisés RL pour le cryptage, c'est flippant!), ou alors utilisent des conjectures mathématiques acceptées mais non démontrées encore.

Bref, il est pas si mal finalement le "petit" crible d'Erastothène ^^
Citation :
Publié par Ahuri Serenity
Au fait si le state_entry fait un llHTTPRequest vers un serveur relié aux supercalculateurs du CEA ca compte ????

Tu peux sans aucun soucis, mais j'attends de voir la ruse de sioux que tu va utiliser pour récupérer les donnée sans HTTP_response


Citation :
Publié par Le poilu
Il serait temps que tu affiches tes propres résultats Magic Cat ...
Ca viendre, ca viendre
Coucou les fous d'algo

Je me suis penché sur cette histoire ce matin. J'ai un peu fouillé le web pour piocher des idées (comme tout le monde je pense) et j'ai fait ma petite sauce. Il y a des algos sympas mais traduits en LSL c'est une catastrophe. J'ai aussi laissé tomber les trucs probabilistes, on veut du sûr . Finalement j'ai opté pour un truc simple mais efficace apparemment.

Voici mes premiers résultats sur une sim tranquille :

Citation :
[01:20 AM] Object: 8.947077 104729
[01:20 AM] Object: 8.828587 104729
[01:20 AM] Object: 9.053953 104729
[01:20 AM] Object: 8.688220 104729
[01:21 AM] Object: 8.952892 104729
[01:21 AM] Object: 8.687158 104729
[01:21 AM] Object: 8.732460 104729
[01:22 AM] Object: 9.050129 104729
[01:22 AM] Object: 8.821710 104729
Le premier nombre est le temps et le second le 10000ème nombre premier. Je ne sais pas si je peux optimiser plus, tout dépendra de la concurrence .

Nota : avec mono au premier lancement le temps est un peu long, mais ensuite on gagne facilement 2s, le temps sans doute de compilation des routines.
Citation :
Publié par Barbidule McBride
Je te soupçonne de calculer tes nombres premiers avec des rotations
C'est une idée ça

J'ai continué mon optimisation, je gagne plus que des bricoles...

Citation :
[03:31 AM] Object 2: 8.214323 104729
[03:31 AM] Object 2: 7.316454 104729
[03:31 AM] Object 2: 7.949096 104729
[03:32 AM] Object 2: 8.867201 104729
[03:32 AM] Object 2: 8.470520 104729
[03:32 AM] Object 2: 8.572545 104729
[03:32 AM] Object 2: 8.611674 104729
[03:32 AM] Object 2: 8.705396 104729
Pour le fun j'ai tenté les 100000 :

Citation :
[03:39 AM] Object 2: 295.279500 1299709
Là faut un peu de patience et il doit falloir changer de stratégie...
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés