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

Dans l'enchaînement, tant que mon mal de crâne ne m'empêche pas trop de réfléchir et que mon mal de doigt ne m'empêche pas trop de taper, la solution au problème suivant qu'il me reste à résoudre: le problème 21.

On parle ici de nombres amicaux. Des nombres amicaux sont des nombres dont l'un est la somme des diviseurs propres de l'autre. Encore une bizarrerie mathématique amusante.

Problème: calculer la somme de tous les nombres amicaux inférieurs à 10000.

#! /usr/bin/env python

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

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

def euler21(maxnum):
    s = 0
    for i in range(1, maxnum):
        j = sumofproperdivisors(i)
        k = sumofproperdivisors(j)
        if k == i and k != j:
            s += j
    return s

print euler21(10000)

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

<<< Project Euler: solution au problème 19, en Python (2009-03-30) | Project Euler : solution au problème 48, en Python (2009-03-29) >>>