Project Euler : Solution au problème 12, en Python

Oui, je propose une solution au problème 12 avant d'en proposer une au problème 11. Il était un brin plus "joli" dans le sens où la solution que je propose ici est du type bien brutal, mais compact.

Attention quand même, c'est de l'algorithme brutalement systématique, donc très lent. Loin au-delà de la minute sacrée, mais correct. Je concocterai une version plus rapide à mes heures perdues (Arnaud si tu me lis, maintenant tu sauras ce que je fais si tu vois du Python au lieu de voir du Java sur mon écran).

And now for the gory part...

#! /usr/bin/env python

# 2009/02/13 - euler012.py
# Solution au Probleme 12 de Project Euler
# http://projecteuler.net/index.php?section=problems&id=12
# Jean Karim Bockstael - jkb@jkbockstael.be

def trianglenumber(n):
    return (n * (n - 1) / 2)

def numberofdivisors(n):
    cnt = 1
    for i in range (1, n / 2 + 1):
        if n % i == 0:
            cnt = cnt + 1
    return cnt

def euler12(n):
    rank = 1
    tri = trianglenumber(rank)
    while numberofdivisors(tri) <= n:
        rank = rank + 1
        tri = trianglenumber(rank)
    return tri

print euler12(500)

Le lecteur attentif remarquera que ça date d'avant le week-end...

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

<<< Project Euler : meilleure solution au problème 12, en Python (2009-02-19) | Conduisez l'originale (2009-02-16) >>>