Université Paris Descartes — UFR Math-Info Année 2016-2017 Licence 2e année Environnement de Calcul Scientifique et Modélisation page web du cours : http://www.mi.parisdescartes.fr/˜moisan/ecs/ Exercices 34 à 36 Exercice 34 (théorème des nombres premiers). 1) Ecrire une fonction t = test premier(n) qui prend en entrée un entier n > 1 et renvoie un vecteur t de booléens, de taille n, tel que t(k) est vrai si et seulement si k est premier (on rappelle qu’un entier naturel k > 2 est premier s’il n’est divisible que par 1 et lui-même). On utilisera la méthode du crible d’Eratosthène pour construire t. Vérifier la fonction pour n = 20, et estimer l’ordre de grandeur du n maximal atteignable en un temps raisonnable (quelques secondes). On utilisera la commande stacksize une fois pour toutes afin de disposer du maximum de mémoire (RAM) possible. 2) Ecrire une fonction l = premiers(n) qui prend en entrée un entier n > 1 et renvoie dans le vecteur l la liste des nombres premiers compris entre 1 et n. Vérifier la fonction pour n = 100. 3) Ecrire une fonction N = compte premiers(n) qui prend en entrée un entier n > 1 et renvoie un vecteur N de taille n tel que N (k) soit égal au nombre de nombres premiers compris entre 1 et k. Vérifier la fonction pour n = 20. Tester expérimentalement, en traçant (commande plot) le graphe de la fonction k 7→ N (k) log(k)/k, le théorème des nombres premiers, qui établit que la limite de cette fonction vaut 1 quand k tend vers l’infini. La convergence semble-t-elle rapide ? Exercice 35 (conjecture de Goldbach). La conjecture de Goldbach (datant de 1742, non démontrée à ce jour, mais l’objet de nouveaux résultats en 2013) prétend que tout entier pair supérieur ou égal à 4 peut s’écrire comme la somme de deux nombres premiers. 1) Ecrire une fonction N = goldbach ok(n) qui prend en entrée un entier n > 1 et renvoie un vecteur N de booléens de taille n tel que N (k) est vrai ssi l’entier 2k peut s’écrire comme la somme de deux nombres premiers. On pourra utiliser le vecteur p = premiers(2*n) (voir exercice 34), et la matrice S de terme général S(i,j) = p(i)+p(j) (autrement dit, N (k) est vrai ssi l’un au moins des termes de S vaut k). A l’aide de la fonction goldbach ok, tester la conjecture de Goldbach jusqu’à l’entier le plus grand possible. Le facteur limitant est-il le temps de calcul ou la quantité de mémoire requise ? 2) Plus généralement, écrire une fonction N = comete goldbach(n) qui prend en entrée un entier n > 1 et renvoie un vecteur N de taille n tel que N (k) soit égal au nombre de façons d’écrire l’entier 2k comme somme de 2 nombres premiers. Tracer par la commande clf;plot(N,’.’,’markersize’,1) le graphe de la fonction k 7→ N (k), appelé “comète de Goldbach”. 1 Exercice 36* (conjecture de Pólya). Écrire une fonction N = nombre facteurs(n) qui prend en entrée un entier n > 1 et renvoie un vecteur N de taille n tel que N (k) soit égal au nombre de facteurs premiers de k. Ecrire ensuite une fonction L = Liouville(n) qui prend en entrée un entier n > 1 et renvoie un vecteur L de taille n tel que L(k) soit égal à la somme pour i = 1 à k des (−1)N (i) avec les notations précédentes. Tracer le graphe de L (appelée fonction de Liouville) calculée pour n = 1000, 10000, 100000, et tester aussi loin que possible la conjecture de Pólya, qui prétend que L(k) 6 0 pour tout entier k > 1. 2