Lucas Willems

LUCAS WILLEMS

Un étudiant de 27 ans passionné par les maths et la programmation

English

Project Euler : fonctions utiles

Article

Comme il est possible, dans les différents problèmes du Project Euler, d'avoir besoin d'utiliser plusieurs fois le même code/fonction, je répertorie et explique ici ces codes pour ne pas avoir à le faire dans les différents articles où j'expose mes solutions trouvées aux problèmes.

Obtenir la liste des diviseurs/facteurs d'un nombre

Cette fonction permet d'obtenir tous les diviseurs/facteurs d'un nombre en incluant ou pas dans cette liste 1 et le nombre :

def divisors(nb, extremum = False):
    divisors = []
    inf = 1 if extremum else 2
    for i in range(inf, int(nb**0.5)+1):
        q, r = divmod(nb, i)
        if r == 0:
            if q >= i:
                divisors.append(i)
                if q > i:
                    divisors.append(nb//i)
    return divisors

Exemples :

Explications :

Vérifier si un nombre est premier

Cette fonction permet de vérifier si un nombre est premier :

def is_prime(nb):
    if nb == 1:
        return False
    if nb == 2:
        return True
    elif nb%2 == 0:
        return False
    for i in range(3, int(nb**0.5)+1, 2):
        if nb%i == 0:
            return False
    return True

Exemples :

Explications :

Vérifier si un nombre est un palindrome

Cette fonction permet de vérifier si un nombre est un palindrome, c'est à dire si on voit le même nombre quand on le lit de gauche à droite que droite à gauche :

def is_palindrome(nb):
    if str(nb) == str(nb)[::-1]:
        return True
    return False

Exemples :

Explication :

Obtenir la liste des nombres premiers inférieurs à un certain nombre

Cette fonction permet d'obtenir très rapidement la liste de tous les nombres premiers inférieurs à une certaine limite / certain nombre et est une implémentation améliorée du crible d'Ératosthène :

def primes_below(end):
    if end < 2:
        return []
    lng = (end//2) - 1
    primes = [True]*lng  
    for i in range(int(lng**0.5)):  
        if primes[i]:
            for j in range(2*i*(i + 3) + 3, lng, 2*i + 3):
                primes[j] = False  
    return [2] + [i*2 + 3 for i, j in enumerate(primes) if j]

Exemples :

Explications :

Vérifier si un nombre est abondant

Cette fonction permet de vérifier si un nombre est abondant :

def is_abundant(n):
    return sum(divisors(n))+1 > n

Exemples :

Explications :

Recherche

Voici les recherches relatives à cette page :

Commentaires

Qu'en pensez-vous ? Donnez moi votre avis (positif ou négatif) pour que je puisse l'améliorer.