Écrire une fonction Python qui prend en entrée un entier n (avec 10 ≤ n ≤ 99) et retourne tous les nombres à deux chiffres m (de 10 à n) tels que, si on note p le chiffre des dizaines et q le chiffre des unités de m, alors p et q sont premiers entre eux (c'est-à-dire que leur PGCD vaut 1).
Solution
1ère méthode sans utilisant la fonction math.gcd():
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
def sont_premiers_entre_eux(a, b): """Teste si deux nombres a et b sont premiers entre eux en examinant leurs diviseurs (sans gcd).""" div_a = [i for i in range(1, a + 1) if a % i == 0] div_b = [i for i in range(1, b + 1) if b % i == 0] # On regarde les diviseurs communs > 1 for d in div_a: if d in div_b and d > 1: return False return True def nombres_premiers_chiffres(n): """Retourne les m entre 10 et n dont les chiffres p et q sont premiers entre eux.""" resultat = [] for m in range(10, n + 1): p = m // 10 # chiffre des dizaines q = m % 10 # chiffre des unités if q != 0 and sont_premiers_entre_eux(p, q): resultat.append(m) return resultat |
2ème méthode en utilisant la fonction math.gcd():
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import math def nombres_premiers_entre_eux_chiffres(n): """ Retourne la liste des nombres à deux chiffres <= n dont les chiffres des dizaines et unités sont premiers entre eux. """ resultat = [] for m in range(10, n + 1): p = m // 10 # chiffre des dizaines q = m % 10 # chiffre des unités if math.gcd(p, q) == 1: resultat.append(m) return resultat # Exemple d'utilisation if __name__ == "__main__": n = 99 print(nombres_premiers_entre_eux_chiffres(n)) |
Younes Derfoufi
CRMEF OUJDA



