Hello!

Inspiré(e) de prendre part à la discussion ? Ou de poser une question ou demander de l’aide ?

Alors bienvenues dans les grands sujets des forums de La Bulle : m’inscrire.

Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires

Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.

Liste de nombres premiers générée par un programme SML
Auteur Message
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22173
Mar 22 Juil 2014 20:29
Message Liste de nombres premiers générée par un programme SML
Ça n’a aucune prétention, c’est juste au cas où ça puisse être utile à quelqu’un(e), en lui faisant profiter du temps de calcul effectué et en lui‑en faisant faire l’économie. C’est une liste de nombres premiers, générée par un programme SML, en téléchargement dans une archive (inutile de penser à poster un telle liste dans un message de forum… elle fait 23 MB).

Le court programme SML a été compilé avec MLton, et a tourné pendant un peu plus de 24 heures, sur une machine Intel 32 bits, 2 cœurs à 1.82 GHz (même si le programme n’utilisait qu’un seul processus), sous Ubuntu 12.04. La commande exacte était `(time ./primes) | tee primes.txt` : chaque nombre premier était à la fois écrit sur la console et dans un fichier, le tout passant par une redirection d’entrée‑sortie, et tout ceci a ralentit le calcul dans une mesure que je ne saurais pas évaluer. La liste produite en 24h aurait donc put être plus longue, mais c’est déjà ça… Yeux au ciel avec le sourire .

Pour info, au bout de 24h, la mémoire consommée par le programme, s’élevait à environ 600 MB.

Le résultat est les 2 608 299 premiers nombres premiers ( Grand sourire ), s’étalant de 2 à 43 066 921.

Archive ZIP standard pour les Windowsien(ne)s et les Unixien(ne)s : primes.zip (6.5 MB)

Pour les gens qui ne veulent pas télécharger cette archive pour simplement avoir le texte du programme SML, sans la grosse liste produite, voici le texte du programme en SML :

Code : 

(* -*- coding:utf-8; mode:sml; indent-tabs-mode:nil; c-basic-offset:3; -*- *)

datatype 'a seq = Cons of 'a * (unit -> 'a seq)

fun hdSeq (Cons (x, _)) = x
fun tlSeq (Cons (_, xs)) = xs

fun seqFrom i = Cons (i, fn () => seqFrom (i + 1))

fun filteredSeq p (Cons (x, xs)) =
if p x then Cons (x, fn () => filteredSeq p (xs ()))
else filteredSeq p (xs ())

fun sift a ns = filteredSeq (fn n => n mod a <> 0) ns

fun sieve (Cons (n, ns)) = Cons (n, fn () => sieve (sift n (ns ())))

val primes = sieve (seqFrom 2)

fun print_all ns =
let val _ = print ((Int.toString (hdSeq ns)) ^ "\n")
in print_all ((tlSeq ns) ())
end

val _ = print_all primes


Je commenterai ce type de programme, plus tard, dans un autre sujet, sur les idiomes SML pour les structures infinies et les continuations (ou simulation de continuations).
Profil Site Internet
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22173
Mer 23 Juil 2014 15:05
Message Re: Liste de nombres premiers générée par un programme SML
Hibou a écrit : 
  • Archive Zip pour les Windowsien(ne)s : Primes.zip (6.5 MB);
  • Archive tar.gz pour les Unixien(ne)s : primes.tar.gz (6.5 MB).

Les deux archives ont le même contenu, à quelques pédantes broutilles près Tire la langue .

Wé, ben bye les pédanteries, ça ne sert à rien de dédoubler un fichier de cette taille, je ne laisse que le ZIP renommée en minuscule. De toute manière le ZIP est dans un standard ISO pour une format de fichier conteneur (j’en reparlerai dans un autre sujet, un jour), et alors les UNIXien(ne)s doivent accepter le format ZIP.
Profil Site Internet
zen
Modératrice
Avatar de l’utilisateur
  • Genre : Fille
  • Age : 55
  • Localisation : Un pied dans l'eau et un sur le mont.
  • Messages : 11010
Jeu 24 Juil 2014 12:33
Message Re: Liste de nombres premiers générée par un programme SML
Hibou a écrit : 
Le résultat est les 2 608 299 premiers nombres premiers ( Grand sourire ), s’étalant de 2 à 43 066 921.

Gné ?! Aux dernières nouvelles 2 n'était pas un nombre premier il me semble.
Profil
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22173
Jeu 24 Juil 2014 13:42
Message Re: Liste de nombres premiers générée par un programme SML
zen a écrit : 
Gné ?! Aux dernières nouvelles 2 n'était pas un nombre premier il me semble.

Si, c’est le premier nombre premier Tire la langue .

Un nombre premier est un nombre qui admet exactement (et seulement) deux diviseurs distincts, qui sont 1 et lui‑même.

Ce n’est pas 2 qui n’est pas un nombre premier, c’est 1.
Profil Site Internet
zen
Modératrice
Avatar de l’utilisateur
  • Genre : Fille
  • Age : 55
  • Localisation : Un pied dans l'eau et un sur le mont.
  • Messages : 11010
Jeu 24 Juil 2014 14:08
Message Re: Liste de nombres premiers générée par un programme SML
Ha oui ! Je ne sais pas pourquoi j'avais remplacé 2 par 1. J’en sais rien
Profil
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22173
Jeu 24 Juil 2014 14:38
Message Re: Liste de nombres premiers générée par un programme SML
zen a écrit : 
Ha oui ! Je ne sais pas pourquoi j'avais remplacé 2 par 1. J’en sais rien

Peut‑être à cause des nombre paires, je sais pas. C’est beaucoup plus rapide à calculer les nombres paires; les nombres premiers, c’est long Oops, n’a fait une bêtise . Je ferai une version modifiée pour être un peu plus rapide, un jour prochain.

En marge, comme tu passais sur ce sujet, je me disais que c’est sûrement assez illisible la notation Hongroise pour les gens qui ne connaissent pas. C’est cette manière d’écrire un nom mot composé en collant tous les mots et en mettant un majuscule pour distinguer le début des mots du mot composé, s’il est composé de plusieurs. Par exemple leChatNoir. Je préfère personnellement le style le_chat_noir, qui me semble plus naturel. Les abréviations aussi, comme écrire hd au lieu de head. Pas mon style habituel, mais c’est tiré d’un cours PDF d’une université Américaine, et ce style que je n’aime pas, est malheureusement le plus académique et le plus courant avec ce langage qu’est SML.
Profil Site Internet
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22173
Lun 15 Sep 2014 14:55
Message Re: Liste de nombres premiers générée par un programme SML
Un point de style. Dans ceci :

Code : 

datatype 'a seq = Cons of 'a * (unit -> 'a seq)

fun hdSeq (Cons (x, _)) = x
fun tlSeq (Cons (_, xs)) = xs


Le type s’appel seq, les fonctions sur ce type utilisent Seq dans leurs noms… Au lieu d’être nommé Cons, le constructeur aurait dut être nommé Seq, ça aurait été plus cohérent. Comme ça :

Code : 

datatype 'a seq = Seq of 'a * (unit -> 'a seq)

fun hdSeq (Seq (x, _)) = x
fun tlSeq (Seq (_, xs)) = xs


Dans le premier message, il faut remplacer Cons par Seq, partout.

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet