NSI , 2023_2024, TP_1

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 : premiers programmes, premières fonctions

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)

c) Ecrire sur le même principe une fonction est_premier(). On cherchera à améliorer la rapidité de cette fonction.

Ressources éventuelles :

On peut lire avec un esprit critique les pages suivantes qui sont les premières proposées par un moteur de recherche :

https://zestedesavoir.com/forums/sujet/10955/python-programme-qui-verifie-si-un-nombre-est-premier/

https://www.quennec.fr/trucs-astuces/langages/python/python-calculer-les-nombres-premiers

Compléter les fonctions suivantes pour qu’elles respectent leur docstring

def est_pair(nombre):
    '''
    renvoie True si le nombre est pair, False sinon
    '''
    
    
def est_impair(nombre):
    '''
    renvoie True si le nombre est impair, False sinon
    '''
    
def est_premier(nombre):
    '''
    renvoie True si le nombre est premier, False sinon
    '''
    

    

Proposition de correction

import math 
def est_pair(nombre):
    '''
    renvoie True si le nombre est pair, False sinon
    >>>est_pair(12)
    True
    >>>est_pair(15)
    False
    '''
    if nombre%2==0:
        return True
    else:
        return False
    
def est_impair(nombre):
    '''
    renvoie True si le nombre est impair, False sinon
    >>>est_impair(12)
    False
    >>>est_impair(15)
    True
    '''
    if nombre%2==1:
        return True
    else:
        return False
    
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