Project Euler : solution au problème 20, en Python

Tiens du code pour Project Euler, ça faisait un petit temps non?

Le problème 19 ne m'attirait pas des masses, avec ses histoires de calendrier (j'ai une espèce de hantise primaire des problèmes de calcul de date) du coup je suis passé directement au problème 20. Parce que je le peux.

Ce problème a une sale tête de punition disciplinaire de prof de maths désabusé. Effrayant et sans solution "maline" ou "élégante", il faut sortir la grosse artillerie, pas le choix.

Tout le monde se souvient de la fonction factorielle? Celle qu'on note n!. Celle-là même:

fact(n) = n*(n-1)*(n-2)*(n-3)*...*3*2*1

Genre elle est la victime idéale du premier contact avec la récursivité:

fact(n) = n*fact(n-1) avec fact(0) = 1

Mais là n'est pas tout à fait la question. L'objectif de ce problème est de fournir la somme des chiffres du nombre 100! sans étouffer au passage. Pour les curieux, 100! est un nombre de 158 chiffres. Rien que ça.

Dieu merci, Python s'en sort très bien avec les grands nombres.

#! /usr/bin/env python

# 2009/03/25 - euler020.py
# Solution au Probleme 20 de Project Euler
# http://projecteuler.net/index.php?section=problems&id=20
# Jean Karim Bockstael - jkb@jkbockstael.be

from math import factorial

def euler20(n):
    num = str(factorial(n))
    sum = 0
    for i in range(0, len(num)):
        sum = sum + int(num[i])
    return sum

print euler20(100)

cc-by-nc | code (python) | project euler

<<< Project Euler : solution au problème 25, en Python (2009-03-26) | Un interprète PHP, en PHP (2009-03-24) >>>