NSI , 2024_2025, TP nombres premiers

Dans un épisode de la série policière « Unité 42 », on peut voir l’affirmation ci-dessus.

« 421421421, c’est un nombre premier en binaire ».

Que pouvons-nous penser de cette affirmation ?

Question 1 :

Que pensez-vous de cette affirmation ?

Question 2 : un peu de maths

Montrer que 421421421 se factorise « facilement » en produit de 2 nombres entiers.

Question 3 : Pair ou impair

a) Ecrire une fonction python est_pair(nombre) permettant de déterminer si un nombre entier est un nombre pair ou pas.
Si le nombre est pair, la fonction renverra l’indicateur booléen True , et False si le nombre n’est pas pair.

b) Ecrire sur le même principe une fonction est_impair(nombre)

def pair(nombre):
    '''
    renvoie True si le nombre est pair, False sinon
    >>>est_pair(1)
    False
    >>>est_pair(15484854545462)
    True
    >>>est_pair(18)
    True
    >>>est_pair(100000007)
    False
    '''

Question 4 : liste de nombres premiers

Compléter la deuxième fonction pour qu’elle réponde à sa docstring.

import math 


def est_premier(nombre):
    '''
    renvoie True si le nombre est premier, False sinon
    >>>est_premier(1)
    False
    >>>est_premier(15484854545462)
    False
    >>>est_premier(17)
    True
    >>>est_premier(100000007)
    True
    '''
    if nombre==1:
        return False
    for diviseur in range(2, int(math.sqrt(nombre))+1):
        if nombre%diviseur==0:
            return False
    return True
    
def liste_nombres_premier(n):
    '''
    retourne la liste des nombres premiers inférieurs
    ou égaux à n
    : entrée : n : int
    : sortie : str
    >>>>>> liste_nombres_premier(11)
    '2,3,5,7,11'
    liste_nombres_premier(100)
    '2,3,5,7,11,13,17,19,23,29,31,37,
    41,43,47,53,59,61,67,71,73,79,83,89,97'
    '''

proposition de correction

def pair(nombre):
    if nombre%2==0:
        return True
    else:
        return False

    
def impair(nombre):
    if nombre%2==1:
        return True
    else:
        return False


import math 

def est_premier(nombre):
    '''
    renvoie True si le nombre est premier, False sinon
    >>>est_premier(1)
    False
    >>>est_premier(15484854545462)
    False
    >>>est_premier(17)
    True
    >>>est_premier(100000007)
    True
    '''
    if nombre==1:
        return False
    for diviseur in range(2, int(math.sqrt(nombre))+1):
        if nombre%diviseur==0:
            return False
    return True
    
def liste_nombres_premier(n):
    '''
    retourne la liste des nombres premiers inférieurs
    ou égaux à n
    : entrée : n : int
    : sortie : str
    >>>>>> liste_nombres_premier(11)
    '2,3,5,7,11'
    liste_nombres_premier(100)
    '2,3,5,7,11,13,17,19,23,29,31,37,
    41,43,47,53,59,61,67,71,73,79,83,89,97'
    '''
    retour=''
    for i in range(2,n+1):
        if est_premier(i):
            retour+=str(i)+","
    return retour[:-1]