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)