Le nombre 1406357289 est un nombre pan-numérique de 0 à 9 (car 0 à 9 apparaissent une fois). Ce nombre a une propriété de sous-chaîne intéressante.
Soit d1 le premier chiffre et d2 le second chiffre, et définissons dn dans l'ordre suivant. En utilisant cette notation, nous pouvons voir ce qui suit.
d2d3d4 =406 est divisible par 2
d3d4d5 =063 est divisible par 3
d4d5d6 =635 est divisible par 5
d5d6d7 =357 est divisible par 7
d6d7d8 =572 est divisible par 11
d7d8d9 =728 est divisible par 13
d8d9d10 =289 est divisible par 17
Trouvez la somme des nombres pan-numériques de 0 à 9 avec cette propriété. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2043
Le codage a été effectué à l'aide du générateur de nombres numériques Pan créé précédemment. Mais c'est assez tard.
# coding: utf-8
import copy
import math
def pandigital(digit,seq1,seq2=[]):
  iter1 = map(str,seq1)
  if seq2:
    iter2 = map(str,seq2)
  else:
    iter2 = copy.deepcopy(iter1)
  for d in range(digit-1):
    iter1 = (x+y for x in iter1 for y in iter2 if not (y in x))
  return iter1
def is_divisible(n):
    div_list = [2, 3, 5, 7, 11, 13, 17]
    for d in range(2,9):
       if (int(n[d-1:d+2]) % div_list[d-2]) != 0:
            return False
    return True
def main():
    digit = 10
    ans = 0
    for pdg in pandigital(digit,range(digit),range(digit)):
        if is_divisible(pdg):
            ans += int(pdg)
    print ans    
        Recommended Posts