#recherche des entiers superpremiers
#ils sont premiers et ne s'ecrivent qu'avec des chiffres eux même premiers
#on ecrit un mini script qui teste si un entier est premier
#et un script qui teste si ses chiffres valent 2, 3, 5, ou 7
#inutile en effet, de tester si les chiffres sont premiers, puisque ils sont plus petit ue 10, atant se contenter des valeurs de cette liste

def TestPremier(n) :
    #prend un entier et retourne un booleen
    for k in range(2, n) :
        if n%k == 0 :
            return(False) #n a un diviseur, on sort avec la reponse False
    return(True) #on n'a trouve aucun diviseur, n est premier
#remarque : l'avantage de la sortie par return :
#dès qu'on a un diviseur, on arrête tout, inutile de les compter tous



def ChiffresPremiers(n) :
    #prend un entier et retourne un booleen
    Mot = str(n) #convertit n en liste de chiffres
    for Chiffre in Mot :
        if Chiffre in ['0','1','4','6','8','9'] : #les valeurs interdites
            return(False) #un chiffre est mauvais, c'est fini
    return(True) #on a tout etudie sans trouver le moindre chiffre interdit

#liste des nombres superpremiers entre 0 et 10**6
L = [] #liste d'accumulation
for n in range(10**6) :
    if ChiffresPremiers(n) and TestPremier(n) : #les deux à la fois
        L.append(n) #on le colle à la liste
print(L)


#recherche du 300ememe superpremier
c, n = 0, 0
while c<300 :
    n+=1
    c += int(ChiffresPremiers(n) and TestPremier(n)) #on compte
print(n)
#au fait, ce script donne le 300eme, le 299eme, le 301eme ?
#testez avec L[299]
