Une suite de premiers

Description

Les nombres : 4+1, 40+1, 400+1 et 4000+1 sont premiers. Mais 40000+1 = 13*17*181.
Ceci suggère de chercher un nombre n ayant les nombres n+1, n*10+1, n*100+1, ...
premiers avec un nombre de nombres premiers obtenus le plus grand possible.

Ce programme a trouvé n = 15538734736 ayant successivement 10 nombres premiers.
Dans le zip ci-joint, le fichier exec.jpg montre l'affichage dans la console en fin
d'exécution, et le fichier explications.txt fournit un supplément d'informations.

Source :

#include <iostream>
#include "mpir.h"
      
int main() {
    mpz_t n; 
    mpz_init(n);
    mpz_set_ui(n, 0);   // le nombre courant essayé
    mpz_t m;
    mpz_init(m);  
    mpz_set_str(m, "1500000000", 10);   // le nombre maximum essayé
    mpz_t d; 
    mpz_init(d);
    mpz_set_ui(d, 2);   // d = 2
    mpz_t nc;
    mpz_init(nc); 
    int mb = 0;         // le nombre maximum de premiers trouvés
    while(mpz_cmp(n,m) < 0) {
        mpz_add(n, n, d);   // n = 2, 4, 6, 8, 10, 12, ...
        int nb = 0;         // le nombre de premiers trouvés
        mpz_set(nc, n);
        mpz_add_ui(nc, nc, 1);    // nc = n + 1
        while (mpz_probab_prime_p(nc, 16) > 0) { 
            nb = nb + 1;
            mpz_sub_ui(nc, nc, 1);
            mpz_mul_ui(nc, nc, 10);
            mpz_add_ui(nc, nc, 1);    // nc = n*10^nb + 1
        }
        if(nb > mb) {
            gmp_printf("n : %Zd  nb : %d", n, nb);
            std::cout << std::endl;
            mb = nb;
        }
    }
    return 0;
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.