Nombres premiers, listes, nombres premiers jumeaux, conjecture de goldbach

Soyez le premier à donner votre avis sur cette source.

Vue 19 220 fois - Téléchargée 507 fois

Description

Ce programme est un ensemble de fonctions qui ont un rapport avec les nombres premiers:
-La première est une fonction booleenne qui dit si un nombre est premier ou non
-La deuxième liste les nombres premiers entre a et b
-La troisième liste les nombres premiers jumeaux
-La dernière test la conjecture de Goldbach

Source / Exemple :


#Codé par Marion

def premier(a):
    #Fonction booleenne qui dit si un nombre est premier ou non
    r=int(a**(0.5))+1
    resultat=True
    i=1
    
    if a==1:
        resultat=False
        #un nombre premier est un nombre qui admet exactement deux
        #diviseurs, 1 n'est pas premier
    elif a%2==0 and a<>2:
        resultat=False
        #Si 2 ne divise pas a alors aucun nombre pair ne divisera a

    
    while 2*i+1 <r+1 and resultat==True :
        #Si un nombre a n'est pas premier alors:
        #il existe un diviseur de a dans [2,racine(a)]
        
        if a%(2*i+1)==0:
            #On ne teste que pour les impairs cf plus haut
            resultat=False
            
        i=i+1
    return(resultat)

def liste(a,b):
    #Fait la liste des nombres premiers entre a et b
    L=[]
    #L sera la sortie
    
    for i in range(a,b+1):
        if premier(i)==True:
            #On utilise la fonction précedente
            L.append(i)
    return(L)

        

def jumeaux(a,b):
    #Fait la liste des nombrs premiers jumeaux
    #ie n et n+2 sont premiers
    L=[]
    P=liste(a,b)
    #on utilise la fonction précedente
    l=len(P)
    for i in range(0,len(P)-1):
        if P[i]==P[i+1]-2:
            L.append([P[i],P[i+1]])
    return L

def gol(n):
    #Test la conjecture de Goldbach
    #Tout nombre impair est la somme de 2 nombrees premiers
    s=1
    i=2
    while s==1 and i<n:
        if premier(i)==True:
            k=n-i
            if premier(k)==True:
                L=[i,k,i+k]
                s=0
        i=i+1
    return L

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Euh quelqu'un peut m'expliquer comment votre code fonctionne sans erreur ?
Exemple les doubles ** en Ligne 5 : r=int(a**(0.5))+1

Je ne comprends pas cette ligne et de plus elle lève une exception.
jordane45
Messages postés
27877
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 mars 2020
324 > Moimeme
cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
265
Bonjour

Merci pour tes commentaires, tes remarques sont bonnes.

C'est un code qui a été fait par Marion qui n'a pas de compte sur codes sources et comme il faut rendre à Cesar ce qui est à Ceasar...
aera group
Messages postés
382
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
10
Bon code ca vaut un 9/10

"if resultat==True on peut mettre if resultat" => Vrai et archi vrai

"mettre un while i<r et apres i=i+1 ce n'est pas très joli" => Au contraire c'est la méthode classique de base = normal voir joli

"faire un break avec sys.exit" => ou faire un break avec un break ça marche aussi et c'est jolie contrairement a ce que les vieux puristes pensent
Preuve : En assembleur (plus bas niveau raisonnable) il est possible de faire un pause dans un programme et de quitter une boucle d'où il n'y a techniquement aucun problème à mettre un break c'est de base dans les micros.

"sys.exit, pas très joli..." => effectivement ça quitte le programme ...

Voila joli, efficace, simple, et non bugé => je suis fan :D

PS : C'est Marion ou Julien je suis perdu ....
____
Aéra
tobias96
Messages postés
3
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 novembre 2008

oui c'est vrai mais mettre un while i<r et apres i=i+1 ce n'est pas très joli non plus...

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.